Inhalt der Datei a.txt
Event: "112506400","17","2016/07/13-15-25-59.00",,,,,,,,,,,"112506400","115101234","02:00:00","pc","abc","4194","file_nam","F",,,"LA
",,"jk","123",,,,,,,,,,
Ich brauche eine Datei, die nicht $20 (Dateiname) hat, die nach asort.txt umgeleitet wird. Gibt es einen kurzen Befehl, da ich derzeit den folgenden verwende?
cat a.txt | grep Event: |awk -F, '{print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$21","$22","$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36","$37}'> asort.txt
Antwort1
Vielleicht kann der Cut-Befehl Folgendes tun:
cat a.txt | cut -d "," -f 1-19,21-37
Daher überspringen Sie das Feld Nr. 20, da Sie davon ausgehen, dass das Komma das stabile Trennzeichen ist.
Antwort2
Das sollte funktionieren:
grep Event: a.txt | awk 'BEGIN{FS=OFS=","}{$20=""; print}' > asort.txt
Antwort3
mitsed
$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){2})[^,]*,/\1/'
a,,c,d
$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){3})[^,]*,/\1/'
a,,b,d
[^,]*,
null oder mehr Text ohne Komma, gefolgt von einem Komma{2}
oder{3}
der vorhergehenden Gruppe zwei- oder dreimal, verwenden Sie die Spaltennummer, um minus eins zu löschen
ähnlich wie perl
, außer dass wir das Regex-Muster wiederverwenden können
$ # (?2) refers to ([^,]*,)
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){2})(?2)/$1/'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){3})(?2)/$1/'
a,,b,d
$ # golfed with lookbehind
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){2}\K(?1)//'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){3}\K(?1)//'
a,,b,d