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
它是错误的写法,按照格式来说应该是行处理,但后边并没有文件,所以它无法进行操作。
祝你好运~~~~
望采纳~~~
这是因为在存在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就能被执行了。
begin 是在处理每一条记录之前就处理的,
你这个只是一个运算输出,所以在处理文件之前可以有返回
你把它加到了主题部分里,你的文件如果有10行的话就会返回10次结果,你现在没结果 说明你的文件是空的