Eine einfache, obwohl awk-lose Lösung in Bash::
while IFS=, read -r a a a b; do echo "$a"; done <inputfile
Es funktioniert dann schneller für kleine Dateien (<100 Zeilen) awkda es weniger Ressourcen verbraucht (vermeidet das Aufrufen der teuren fork
undexecve
Systemaufrufe).
EDIT von Ed Morton (Entschuldigung für die Antwort, ich weiß nicht, ob es einen besseren Weg gibt, dies zu beheben):
Um den Mythos auszuräumen, dass die Shell für kleine Dateien schneller als awk ausgeführt wird:
$ wc -l file
99 file
$ time while IFS=, read -r a a a b; do echo "$a"; done <file >/dev/null
real 0m0.016s
user 0m0.000s
sys 0m0.015s
$ time awk -F, '{print $3}' file >/dev/null
real 0m0.016s
user 0m0.000s
sys 0m0.015s
Ich gehe davon aus, dass das Shell-Skript in einem Bruchteil eines Augenblicks schneller ausgeführt wird als das awk-Skript, wenn Sie eine WIRKLICH kleinste Datei erhalten. Aber wen interessiert das?
Und wenn Sie nicht glauben, dass es schwieriger ist, robuste Shell-Skripte als awk-Skripte zu schreiben, sehen Sie sich diesen Fehler in dem von Ihnen veröffentlichten Shell-Skript an:
$ cat file
a,b,-e,d
$ cut -d, -f3 file
-e
$ awk -F, '{print $3}' file
-e
$ while IFS=, read -r a a a b; do echo "$a"; done <file
$
awk
? IMHO ist dies ein sehr einfaches Problem. Haben Sie einen Versuch, es zu lösen?