Meine Datendatei sieht so aus:
1
2 4 5 6 7 19
20
22
24 26 27
29 30 31 32 34 40 50 56 58
234 235 270 500
1234 1235 1236 1237
2300
Ich möchte die Zeilen mit mehr als 4 Spalten in kleinere Zeilen mit maximal 4 Spalten pro Zeile aufteilen. Daher sollte die Ausgabe folgendermaßen aussehen:
1
2 4 5 6
7 19
20
22
24 26 27
29 30 31 32
34 40 50 56
58
234 235 270 500
1234 1235 1236 1237
2300
Irgendwelche Vorschläge? Bitte bedenken Sie, dass meine echte Datendatei riesig ist.
Antwort1
Mit awk
:
awk '{ if(NF>4) for(i=5; i<=NF; i+=4) $i = "\n" $i } 1' file
Mit sed
:
sed 's/ /\n/4;T;P;D' file
Mit perl
:
perl -lpe '$c = 0; s/ /++$c % 4 ? " " : "\n"/goe' file
Ausgabe:
1
2 4 5 6
7 19
20
22
24 26 27
29 30 31 32
34 40 50 56
58
234 235 270 500
1234 1235 1236 1237
2300
Antwort2
Der einfachste Ansatz wäre eine späte Zusammenführung oder eine Zipper-Methode. Gehen Sie davon aus, dass das letzte Zeichen jeder Zeile ein Leerzeichen ist. Teilen Sie Ihre Datei zunächst in zwei Teile auf, je nach den Spalten, die Sie ausschneiden möchten.
cut -d' ' -f1-4 file > file1
cut -d' ' -f5- file > file2
Zweitens führen Sie die Dateien per Late Merge zusammen und löschen Sie leere Zeilen.
paste -d'\n' file1 file2 | sed '/^$/d'