ファイル内のデータセットの平均を計算するときに最初の行をスキップできますか?

ファイル内のデータセットの平均を計算するときに最初の行をスキップできますか?

次のコマンドを実行するとき:

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空の行または数値以外のフィールドを含む行の場合は、エラーが発生し、列の値が実際に1であることを確認してください。数字計算と除算を避けるために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!=1FNR>1入力の最初の行をスキップします。

関連情報