Хоча простий awk-без розчину в баш:
while IFS=, read -r a a a b; do echo "$a"; done <inputfile
Тоді це працює швидше для невеликих файлів (<100 рядків) awkоскільки він використовує менше ресурсів (уникає дзвінків на дорогі fork
та execve
системні дзвінки).
EDIT від Еда Мортона (вибачте за привітання, я не знаю, чи є кращий спосіб вирішити це питання):
Щоб заспокоїти міф про те, що оболонка буде працювати швидше, ніж awk для невеликих файлів:
$ 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
Я сподіваюся, якщо ви отримаєте ДІЙСНО досить маленький файл, то ви побачите, як скрипт оболонки запускається за мить швидше, ніж сценарій awk, але кого це цікавить?
І якщо ви не вірите, що важче писати надійні сценарії оболонки, ніж сценарії awk, подивіться на цю помилку в опублікованому вами сценарії оболонки:
$ 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
? ІМХО це дуже проста проблема. Чи є у вас спроби вирішити це?