我在文件中有内容
喜欢
asdfb ... 1
adfsdf ... 2
sdfdf .. 3
我想编写一个unix命令,该命令应该能够添加1 + 2 + 3并将结果显示为6
据我所知,grep和awk会很方便,任何指针都会有所帮助。
答案 0 :(得分:4)
我相信您正在寻找以下内容。它将总结每个记录中从stdin读取的数据的最后一个字段。
awk '{ sum += $NF } END { print sum }' < file.txt
有些注意事项:
NF
是当前记录中的字段数。通过在$前加上我们将其值视为变量。至少这是它看起来如何工作:)END { }
块只有在其他块处理完所有记录后才会生成。答案 1 :(得分:1)
您需要awk
脚本,因为它内置了grep
个设施作为语言的一部分。
假设您的实际文件包含:
asdfb zz 1
adfsdf yyy 2
sdfdf xx 3
你要总结第三列。您可以使用:
echo 'asdfb zz 1
adfsdf yyy 2
sdfdf xx 3' | awk '
BEGIN {s=0;}
{s = s + $3;}
END {print s;}'
BEGIN子句在处理任何行之前运行,在处理所有行之后运行END子句。
对于每一行都会发生另一个子句,但您可以添加更多子句来根据各种事物(grep
- py事物)更改行为。
答案 2 :(得分:0)
这可能不是你想要的,但我写了一个快速的Ruby脚本来实现你的目标:
#!/usr/bin/env ruby
total = 0
while gets
total += $1.to_i if $_ =~ /([0-9]+)$/
end
puts total
答案 3 :(得分:0)
这是Perl中的一个。
$ cat foo.txt
asdfb ... 1
adfsdf ... 2
sdfdf .. 3
$ perl -a -n -E '$total += $F[2]; END { say $total }' foo
6
Golfed版本:
perl -anE'END{say$n}$n+=$F[2]' foo
6