Wie kann ich sed
eine Datei in zwei Teile aufteilen, sodass die Datei, die den Inhalt enthält,
eric shwartz
david snyder
wobei die 4 Leerzeichen zwischen den Einträgen eigentlich Tabulatoren in zwei Dateien sind, wie zum Beispiel:
file1
:
eric
david
file2
:
shwartz
snyder
Daher wird alles nach dem Tabulator in jeder Zeile in eine andere Datei eingefügt.
Antwort1
Eine Lösung könnte sein:
awk '{ print $1 > "file1"; print $2 > "file2"}' file
Antwort2
Muss es ein Skript sein? Wenn nicht, können Sie Folgendes tun:
cut -f 1 file > file1
cut -f 2 file > file2
cut
wählt eine Spalte aus (standardmäßig durch Tabulator getrennt). -f ist ein Flag, das eine Zahl als Argument annimmt, und diese Zahl ist eine Spaltennummer.
Antwort3
Ich glaube nicht, dass es einfacher sein kann alsawk
Ansatz,hier ist also eine Perl-Lösung, die für eine beliebige Anzahl von Spalten funktioniert und jede in einer eigenen Datei speichert:
perl -ane 'unless($handles[0]){
for(1..$#F+1){
open(my $fh, ">","file$_");
$handles[$_-1] = $fh
}
}
for my $i (0..$#F){
print { $handles[$i] } "$F[$i]\n"
}' file
Gegeben sei eine Eingabedatei wie diese:
$ cat file
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
Das obige Skript erstellt Dateien, die file1
jeweils file4
die entsprechende Spalte enthalten.
Natürlich können Sie genau dasselbe in tun awk
, viel einfacher und eleganter, aber wo bleibt da der Spaß?
awk '{for(i=1;i<=NF;i++){print $i > "file"i}}' file
Antwort4
moreutils (in vielen Distro-Repos verfügbar oderhttp://joeyh.name/code/moreutils/) verfügt über einige praktische Dienstprogramme, von denen eines hier hilft:
pee 'cut -f1 >file1' 'cut -f2 >file2' < file