Linux:为什么我这样使用awk就没有输出结果呢?

2025-05-18 00:52:07
推荐回答(3个)
回答1:

awk的格式:

awk [选项]  ' BEGIN{编辑指令 } {编辑指令} END{编辑指令}'  文件

BEGIN{},行前处理

——在读入行之前的操作,通常用来初始化操作,是可选操作

只做预处理的时候,可以没有操作文件。可以用这个

 

{},行处理,

——awk处理读入的行

 

END{},行后处理

——awk把所有的行都处理完后执行的操作;一般输出处理结果



这三个是可以独立使用的。



val=$(awk
'BEGIN{print 7.01*5-4.01}')

echo $val

这个是行前处理,并没有对文件进行读取,它的效果就是对括起来的数进行运算



val=$(awk
'{print 7.01*5-4.01}')

echo $val

它是错误的写法,按照格式来说应该是行处理,但后边并没有文件,所以它无法进行操作。



祝你好运~~~~

望采纳~~~

回答2:

这是因为在存在BEGIN的情况下,不管有没有输入,awk都会在输出的开头执行print 7.01*5-4.01
这个命令。
在没有BEGIN时(也就是第二种情况),你没有给awk输入,awk也就不会执行print 7.01*5-4.01
这条命令。对于该种情况,一种解决办法是,将
val=$(awk'{print 7.01*5-4.01}') 改为
val=$(awk'{print 7.01*5-4.01}' <<<"")
修改之后相当于给了awk一个空的输入,这样print 7.01*5-4.01就能被执行了。

回答3:

begin 是在处理每一条记录之前就处理的,
你这个只是一个运算输出,所以在处理文件之前可以有返回
你把它加到了主题部分里,你的文件如果有10行的话就会返回10次结果,你现在没结果 说明你的文件是空的