Ich habe eine .txt
, die so veranschaulicht werden kann:
NAME | CODE
name1 | 001
name2 | 001
name3 | 002
name4 | 003
name5 | 003
name6 | 003
Ich muss ein Skript schreiben, um diese Datei entsprechend der CODE
Spalte aufzuteilen. In diesem Fall würde ich Folgendes erhalten:
file 1:
NAME | CODE
name1 | 001
name2 | 001
file 2:
NAME | CODE
name3 | 002
file 3:
NAME | CODE
name4 | 003
name5 | 003
name6 | 003
Nach einigen Untersuchungen würde die Verwendung von awk funktionieren:
$ awk -F, '{print > $2".txt"}' inputfile
Die Sache ist, ich muss auch den Header in die erste Zeile einfügen und ich muss die Dateinamen unterschiedlich sein. Anstelle von 001.txt
zum Beispiel muss der Dateiname so etwas wie sein FILE_$FILENAME_IDK.txt
.
quelle
|
als Feldtrennzeichen verwenden möchten :awk -F'|' 'NR==1{h=$0; next} !seen[$2]++{f="FILE_"FILENAME"_"$2".txt";gsub(/ /,"",f);print h > f} {print >> f}'
. Dasgsub()
ist, das Leerzeichen am Anfang von Feld 2 zu entfernen, zB `001` ->001
awk -F' \\| ' 'NR==1{h=$0; next} !seen[$2]++{f="FILE_"FILENAME"_"$2".txt";print h > f} {print >> f}'
danke an stackoverflow.com/questions/25867060/…\
. Sie müssen den\
ersten entkommen und dann den entkommenen verwenden\
, um dem zu entkommen|
. Zugegeben, nicht sehr intuitiv.Ich wette, jemand wird sich einen Einzeiler einfallen lassen, aber ich musste ein Skript erstellen:
quelle
i=$((i+1))
funktioniert es richtig?