Wie kann ich eine Textdatei in neue Dateien aufteilen?

Wie kann ich eine Textdatei in neue Dateien aufteilen?

Ich habe eine Textdatei im folgenden Format:

001|fileA
002|fileA
003|fileA
004|fileB
005|fileB
006|fileC
.
.
.
xxx|fileX

Ich muss diese Datei in die Dateien aufteilen, die den einzelnen "|" entsprechen. Die Namen der neuen Dateien lauten wie DateiA, DateiB, DateiC ... DateiX.

Antwort1

versuchen

 awk -F\| '{ print $1 > $2 ; }' file

Wo

  • -F\|Sagen Sie awk, es als Trennzeichen zu verwenden |. | muss maskiert werden.
  • > $2Drucken auf $2den Wert umleiten.

bei vielen (> 10) Dateien:

for x in $(awk -F\| '!a[$2]++ { print $2}' file)
do
    awk -F\| -v f="$x" '$2 == f { print $1}' file > "$x"
done
  • zuerst awk lediglich eindeutige Dateinamen auflisten
  • 52 Dateien sind in Ordnung, bei Hunderten von Dateien kann es jedoch langsam werden.

eine weitere Alternative, vorausgesetzt, die Felder können „sicher“ in die Shell eingefügt werden

awk -F\| '{printf "echo %s >> %s\n",$1,$2;}' file | bash
  • Denken Sie daran, Datei X vorher zu löschen, falls Sie es erneut ausführen möchten.

verwandte Informationen