2016-07-27 25 views
0

ich mit mehreren tausend Zahlen eine Textdatei wie diese angeordnet haben:Merge spezifische Linien - awk/sed

line 1: #0 #1 #2 #3 #4 #5 
line 2: #6 #7 #8 #9 #10 #11 
... 
line 111: #106 #107 #108 #109 #110 
line 112: #111 #112 #113 #114 #115 
... 

Was Ich mag würde, ist Format tun, um meine Datei wie folgt aussehen:

line 1: #0 #1 #2 #3 #4 #5 #111 #112 #113 #114 #115 ... 
line 2: #6 #7 #8 #9 #10 #11 #116 #117 #118 #119 #120 #121 ... 
... 
line 111: #106 #107 #108 #109 #110 #218 #219 #220 #221 #222 #223... 

Grundsätzlich möchte ich meine Zahlen in einer 111x111-Matrix arrangieren (also nach den ersten 111 Zeilen, die an Ort und Stelle bleiben würden, würde Zeile 112 mit der ersten Zeile, Zeile 113 mit dem zweiten usw. zusammengeführt und dies würde für alle 111 Zeilen passieren) . Gibt es eine Möglichkeit, dies mit awk/sed zu tun?

Jede Hilfe wäre willkommen!

Antwort

1

Wenn Sie temporäre Dateien haben, können Sie split und dann paste verwenden. split teilt eine Datei in kleinere Dateien von n Zeilen und paste nimmt Eingabedateien und verkettet sie vertikal.

ein beliebiges Präfix tmp für unsere temporären Dateien Auswahl:

split -l 111 input.txt tmp 
paste tmp* >output.txt 
rm tmp* 
+0

danke, es funktioniert perfekt, ich habe nichts dagegen temporäre Dateien mit! – JavaNewb

+0

Kein Problem. Fühlen Sie sich frei zu akzeptieren (http://stackoverflow.com/help/accepted-answer), wenn es Ihr Problem gelöst hat. – leekaiinthesky

1

Versuchen Sie dieses, nicht getestet, da Sie nicht prüfbar Probe Eingabe/Ausgabe vorsah:

awk -v RS='\\s' '{ORS=(NR%111?"\n":OFS)}1' file 

Die oben verwendet GNU awk für Multi-char RS und \s.