Я получил сценарий awk с именем my_awk:

#!usr/bin/awk -f

{ 
if ($1 == "#START") { FS=":";} 
else if ($1 == "#STOP") { FS = " ";}
else { print $3} 
}

И я вызвал это через:

cat my_file | awk -f my_awk

Я новичок в awk, поэтому я не знаю о механизме awk. Будет ли этот скрипт my_awk выполнять свою команду для всего файла my_file или для каждой строки файла?

1 ответ1

2

Когда вы передаете что-то скрипту, скрипт будет выполнен только один раз. Так, например, если вы делаете:

foo | bar

тогда bar вызывается только один раз, и его STDIN - это то, что foo написал в STDOUT.

Там у вас бесполезное использование cat , так как вы можете просто:

awk -f my_awk < my_file

Или, поскольку awk может напрямую работать с аргументами имени файла:

awk -f my_awk my_file

Если вы идете дальше, сам awk - это инструмент, работающий построчно, но на самом деле он вызывается оболочкой только один раз. Из этого урока:

Как и большинство утилит UNIX, AWK ориентирован на строки. То есть шаблон определяет тест, который выполняется с каждой строкой, считываемой в качестве ввода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .