将变量的内容写入文件

时间:2013-12-20 10:42:54

标签: linux bash shell unix awk

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

$ seq 1 5 | awk '{sum+=$1} end {print sum; echo "$sum" > test_file}'

6 个答案:

答案 0 :(得分:3)

看起来你混淆了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&#39> 重定向。但是,它使用与BASH相同的语法:

$ seq 1 5 | awk '{ sum += $1 } END { print sum > "test_file" }'

请注意,必须引用文件名,否则Awk会认为test_file是变量,并且您将在重定向到空文件名时收到一些错误。

答案 1 :(得分:2)

要将输出写入文件,您必须重定向到"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

答案 2 :(得分:1)

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

seq 1 5 | awk '{sum+=$1} END {print sum > "test_file"}

答案 3 :(得分:1)

您不需要awk。你可以说:

$ seq 5 | paste -sd+ | bc > test_file
$ cat test_file
15

答案 4 :(得分:0)

这个问题用标记,所以这里有一个纯粹的bash解决方案:

for ((i=1; i<=5; i++)); do ((sum+=i)); done; echo "$sum" > 'test_file'

或者这个:

for i in {1..5}; do ((sum+=i)); done; echo "$sum" > 'test_file'

答案 5 :(得分:-2)

http://sed.sourceforge.net/grabbag/scripts/add_decs.sed

#! /bin/sed -f

# This is an alternative approach to summing numbers,
# which works a digit at a time and hence has unlimited
# precision.  This time it is done with lookup tables,
# and uses only 10 commands.

G
s/\n/-/
s/$/-/
s/$/;9aaaaaaaaa98aaaaaaaa87aaaaaaa76aaaaaa65aaaaa54aaaa43aaa32aa21a100/

:loop
/^--[^a]/!{
  # Convert next digit from both terms into analog form
  # and put the two groups next to each other
  s/^\([0-9a]*\)\([0-9]\)-\([^-]*\)-\(.*;.*\2\(a*\)\2.*\)/\1-\3-\5\4/
  s/^\([^-]*\)-\([0-9a]*\)\([0-9]\)-\(.*;.*\3\(a*\)\3.*\)/\1-\2-\5\4/

  # Back to decimal, but keeping the carry in analog form
  # \2 matches an `a' if there are at least ten a's, else nothing
  #
  #    1-------------           3-    4----------------------
  #               2                               5----
  s/-\(aaaaaaaaa\(a\)\)\{0,1\}\(a*\)\([0-9b]*;.*\([0-9]\)\3\5\)/-\2\5\4/
  b loop
}
s/^--\([^;]*\);.*/\1/
h