当我计算文件中一组数据的平均值时,我可以跳过第一行吗

当我计算文件中一组数据的平均值时,我可以跳过第一行吗

当我执行以下命令时:

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!=1NR>1从单个/多个输入中跳过第一行;或
FNR!=1FNR>1跳过每个输入的第一行;

相关内容