Aufteilen einer Datei in mehrere Dateien mithilfe von Shell-Befehlen

Aufteilen einer Datei in mehrere Dateien mithilfe von Shell-Befehlen

Ich möchte meine Datei in mehrere Dateien aufteilen.

Unten ist die Datei, die ich habe.

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

Ich möchte die Datei in die folgenden Teile aufteilen:

Datei1

sort a # 3|4
sort a # 2|5

Datei2

sort b # 1|2
sort b # 2|5

Wie Sie sehen, habe ich sie basierend auf der zweiten Spalte aufgeteilt. Da ich für Spalte zwei viele verschiedene Werte habe, nimmt das mühsame Aufteilen der Datei viel Zeit in Anspruch. Wie kann ich dieses Problem lösen?

Antwort1

AWKLösung:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- Überprüfung auf eindeutige zweite Feldwerte, $2indem dieser als Index des Arrays verwendet wird a. Die Bedingung !a[$2]++wird truenur beim ersten Vorkommen eines eindeutigen $2Wertes ausgewertet.
  • fn="file"++c- ErstellenDateinamemit aufsteigendem Suffix++c

Ergebnisse anzeigen:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

Antwort2

split -l 2 test

Dadurch werden zwei geteilte Dateien generiert. Ausgabe der geteilten Dateien:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

verwandte Informationen