awk 脚本或命令是否会对读取的每一行执行自身?

awk 脚本或命令是否会对读取的每一行执行自身?

我得到了一个名为 my_awk 的 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

当你将某些内容通过管道传输到脚本时,该脚本将仅执行一次。因此,例如,如果你执行:

foo | bar

thenbar只被调用一次,其 STDIN 就是foo写入 STDOUT 的内容。

你有一个无用地使用cat因为你可以这样做:

awk -f my_awk < my_file

或者,由于awk可以直接使用文件名参数:

awk -f my_awk my_file

如果你进一步了解,awk它本身是一个逐行工作的工具,但它实际上只被 shell 调用一次。从本教程

与大多数 UNIX 实用程序一样,AWK 是面向行的。也就是说,模式指定对作为输入读取的每行执行的测试。

相关内容