首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量的内容写入文件

将变量的内容写入文件
EN

Stack Overflow用户
提问于 2013-12-20 18:42:54
回答 6查看 92关注 0票数 0

如何在此操作中保存变量sum的内容?

代码语言:javascript
复制
$ seq 1 5 | awk '{sum+=$1} end {print sum; echo "$sum" > test_file}'
EN

回答 6

Stack Overflow用户

发布于 2013-12-20 20:23:08

看起来你混淆了BASH语法和Awk。Awk是一种编程语言,它的语法与BASH非常不同。

代码语言:javascript
复制
$ seq 1 5 | awk '{ sum += $1 } END { print sum }'
15

您希望将该15捕获到一个文件中:

代码语言:javascript
复制
$ seq 1 5 | awk '{ sum += $1 } END { print sum }' > test_file

这就是使用shell的重定向。>出现在shell控制的Awk程序之外,并将标准输出重定向到文件test_file中。

你也可以在Awk内部重定向,但这是Awk的重定向。但是,它使用与BASH相同的语法:

代码语言:javascript
复制
$ seq 1 5 | awk '{ sum += $1 } END { print sum > "test_file" }'

注意,文件名必须加引号,否则Awk将假定test_file是一个变量,并且您将得到一些关于重定向到空文件名的错误。

票数 3
EN

Stack Overflow用户

发布于 2013-12-20 18:44:29

要将输出写入文件,必须重定向到"test_file",如下所示:

代码语言:javascript
复制
$ 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)语法:

代码语言:javascript
复制
$ sum=$(seq 5 | awk '{sum+=$1} END{print sum}')
$ echo $sum
15
票数 2
EN

Stack Overflow用户

发布于 2013-12-20 18:44:14

echo在awk命令中不起作用。试试这个:

代码语言:javascript
复制
seq 1 5 | awk '{sum+=$1} END {print sum > "test_file"}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20701769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档