我有一个来自Web服务器的日志文件,看起来像这样;
1908 462
232 538
232 520
232 517
Run Code Online (Sandbox Code Playgroud)
我的任务是在bash脚本中总计第1列和第2列.我想要的输出是;
2604 2037
Run Code Online (Sandbox Code Playgroud)
我知道awk或者sed哪个方面可以解决我的问题,但我无法理解如何实际解决问题.我在谷歌上搜索了一些例子,但没有发现任何有用的东西.有人能指出我正确的方向吗?
awk '{a += $1; b += $2} END { print a " " b }' foo.log
Run Code Online (Sandbox Code Playgroud)
(注意完全没有错误检查.)
编辑:
好的,这是一个错误检查的版本:
awk 'BEGIN { ok = 1 } { if (/^ *[0-9]+ +[0-9]+ *$/) { a += $1; b += $2 } else { ok = 0; exit 1 } } END { if (ok) print a, b }' foo.log
Run Code Online (Sandbox Code Playgroud)
如果您不想接受前导空格或尾随空格,请删除" *"if语句中的两个空格.
但这足够大,它可能不应该是一个单行:
#!/usr/bin/awk -f
BEGIN {
ok = 1
}
{
if (/^ *[0-9]+ +[0-9]+ *$/) {
a += $1
b += $2
}
else {
ok = 0
exit 1
}
}
END {
if (ok) print a, b
}
Run Code Online (Sandbox Code Playgroud)
仍然没有溢出或下溢检查,它假定没有迹象.后者很容易修复; 前者会更难.(注意awk在内部使用浮点;如果总和足够大,它可能会悄然失去精度.)
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |