【发布时间】:2014-06-10 00:42:41
【问题描述】:
awk 可能让我头疼。我试图总结某一行的一定数量的行。
cat /home/logger/uplog.txt | awk 'NR==1,NR==7 {print $5}';
我知道这只会给我字段 1 到 7 的输出。我尝试的是
awk 'NR==1,NR==7 {print sum += $5}
但结果看起来没有我的预期。那么我该如何进行这个简单的计算,因为这是该脚本中的第二个 awk 命令,因此要再读一次。顺便说一句,也包括这个问题,如何在 awk 语句中的一定数量的行之后写入 /dev/null,例如
(R=0,R<=181,R++)
for R in FNR>=181 /dev/null ;
任何提示,在此先感谢。
【问题讨论】:
-
字段分隔符并在 stackoverflow 上阅读。
-
NR==1,NR==7表示有两个用逗号分隔的模式:一个在记录号为 1 时匹配,另一个在记录号为 7 时匹配。所以{ action }执行第一行,为第七行。这就是你想要的吗? -
如果您只想打印
sum,请执行{sum += $5},然后将打印内容放入END块中:END { print sum }。 -
另外,不需要
cat。awk接受输入文件参数:awk 'script' yourfile。 -
@Kaz:你说,
so the { action } executes for the first line and for the seventh line.其实awk支持range语法类似于sed的:NR==1,NR==7指的是inclusive记录范围 1 到 7.