当我执行以下命令时:
awk '{T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'
有什么办法可以跳过第一行吗?也许类似NR!=1
?
答案1
是的,类似NR!=1
, 或NR > 1
:
awk 'NR > 1 {T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'
如果您想对多个文件执行此操作,请改用FNR
:
awk 'FNR > 1 {T=0; for (i=1;i<=NF;i++) T+=$i; T/=NF; printf "%12.7f\n",T}'
(我发现不平等更清晰:对我来说,它明确表明我们对记录感兴趣后具体记录。)
答案2
您还可以如下优化命令以及错误处理division by zero
在空行或包含非数字字段的行的情况下出错,并且还验证列的值(如果它确实是一个)数字以避免计数和除法NF
变量而不是,因为它会给你错误的结果,请执行以下操作:
测试的输入文件:
6 c v g
<-- empty line
d b d s
<-- mixed of Tabs/Spaces
1 2 3 4
5 6 7 8
命令:
awk '
{
T=nf=0;
for(i=1; i<=NF; i++) {
nf+=($i+0==$i?1:0);
T+=$i;
};
printf ("%12.7f\n", T/(nf?nf:1) );
}' infile
输出:
6.0000000
0.0000000
0.0000000
0.0000000
2.5000000
6.5000000
好吧,跳过第一行,是的,你可以这样做
NR!=1
或NR>1
从单个/多个输入中跳过第一行;或
FNR!=1
或FNR>1
跳过每个输入的第一行;