AWK - 例如解释

时间:2012-11-13 12:11:00

标签: awk system

我有一个文件 1

1
2
3

此命令打印:

$ awk 'BEGIN{system("cat " 1)}'
1
2
3

$ awk 'BEGIN{system( "cat '\''" 1 "'\''") }'
1
2
3

我将文件名从“ 1 ”更改为“ 1

我有一个文件一个

1
2
3

现在,该命令不起作用:

$ awk 'BEGIN{system("cat " one)}' 
|

$ awk 'BEGIN{system( "cat '\''" one "'\''") }'
cat: : No such file or directory

为什么现在命令不起作用?

感谢您的解释。

3 个答案:

答案 0 :(得分:2)

在您的示例中,awk将1解释为文字1,将one解释为没有值的变量。这意味着system正在尝试执行cat {empty}cat ''

试试这个:

awk 'BEGIN{one = "one" ; system("cat " one)}'

或:

awk 'BEGIN{system("cat one")}'

答案 1 :(得分:1)

在awk中,1的值为1,名为one的变量为空字符串。因此"cat" 1是字符串cat 1,但"cat" one是字符串cat。字符串"cat '\''" one "'\''"是字符串cat '',因此您将空字符串作为cat的第一个参数传递。

答案 2 :(得分:1)

如果您的文件名是数字,您可以直接在system()中写入数字,awk会在内部将其转换为字符串值。你甚至可以写表达式来获得数字作为结果。例如:

system("cat "4-3)也适用于您的“1”案例。要查看差异,您可以将文件命名为“1 + 1”,然后system("cat "1+1)将无效,它会抱怨文件“2”不存在。

对于“one”示例:系统中的“one”()不像字符串“one”,而是名为“one”的变量。在awk中,如果未分配变量,则其默认值为空字符串。