如何在此操作中保存变量sum的内容?
$ seq 1 5 | awk '{sum+=$1} end {print sum; echo "$sum" > test_file}'发布于 2013-12-20 20:23:08
看起来你混淆了BASH语法和Awk。Awk是一种编程语言,它的语法与BASH非常不同。
$ seq 1 5 | awk '{ sum += $1 } END { print sum }'
15您希望将该15捕获到一个文件中:
$ seq 1 5 | awk '{ sum += $1 } END { print sum }' > test_file这就是使用shell的重定向。>出现在shell控制的Awk程序之外,并将标准输出重定向到文件test_file中。
你也可以在Awk内部重定向,但这是Awk的重定向。但是,它使用与BASH相同的语法:
$ seq 1 5 | awk '{ sum += $1 } END { print sum > "test_file" }'注意,文件名必须加引号,否则Awk将假定test_file是一个变量,并且您将得到一些关于重定向到空文件名的错误。
发布于 2013-12-20 18:44:29
要将输出写入文件,必须重定向到"test_file",如下所示:
$ seq 5 | awk '{sum+=$1} END{print sum > "test_file"}'
$ cat test_file
15您的版本不起作用,因为您没有引用test_file,因此对于awk,它被认为是一个变量。而且由于您事先没有定义它,awk无法正确地重定向。David W's answer很好地解释了这一点。
还要注意,seq 5等同于seq 1 5。
如果要将结果保存到变量中,可以使用var=$(command)语法:
$ sum=$(seq 5 | awk '{sum+=$1} END{print sum}')
$ echo $sum
15发布于 2013-12-20 18:44:14
echo在awk命令中不起作用。试试这个:
seq 1 5 | awk '{sum+=$1} END {print sum > "test_file"}https://stackoverflow.com/questions/20701769
复制相似问题