指定されたヘッダーを持つ列のすべての値を合計します。

指定されたヘッダーを持つ列のすべての値を合計します。

他のテーブルのセクションを含むファイルがあります。ヘッダーN * dNで、各列に含まれるすべての値を追加したいと思います。

たとえば、

omega (dN/dS) = 999.00000

dN & dS for each branch

 branch          t       N       S   dN/dS      dN      dS  N*dN  S*dS

  11..6      0.000   532.0   266.0 999.0000  0.0000  0.0000   3.0   0.0
  11..7      0.000   532.0   266.0 999.0000  0.0000  0.0000   4.0   0.0
  11..12     0.000   532.0   266.0 999.0000  0.0000  0.0000   0.5   0.0

omega (dN/dS) = 1.00000

dN & dS for each branch

 branch          t       N       S   dN/dS      dN      dS  N*dN  S*dS

  11..6      0.000   532.0   266.0 999.0000  0.0000  0.0000   7.0   0.0
  11..7      0.000   532.0   266.0 999.0000  0.0000  0.0000   2.0   0.0
  11..12     0.000   532.0   266.0 999.0000  0.0000  0.0000   0.4   0.0

希望の出力:

7.5
9.4

多分少し修正

awk '{s+=$8}END{print s}'

そこで列ヘッダーを指定し、合計の合計ではなく、各合計に対して別々の結果を印刷することができます。

ベストアンサー1

この方法で使用できますawk(コンテンツの後には常に一致するヘッダーがあり、すべての数が同じで、その間に空白行がないと仮定します)。

awk 'f{s+=$8;f++} ($8=="N*dN"){f=1} (f>4){print s;f=s=0}' infile

または、通常は次のように使用します。N*dN8列目の次の項目にロールアップされます。

awk 'f{s+=$8} (f &&$8=="N*dN"){print s;f=s=0} ($8=="N*dN"){f=1} END{print s}' infile

おすすめ記事