1

2 番目の列の文字列が繰り返されるときに、1 つの列の数値を合計する方法を見つけようとしています。

私のファイルは次のようになります。

0.35    Scer|ChrIX|ref|NC_001141.1|
0.21    Scer|ChrIX|ref|NC_001141.1|
0.40    Scer|ChrIX|ref|NC_001141.1|
0.27    Scer|ChrIX|ref|NC_001141.1|
0.26    Scer|ChrIX|ref|NC_001141.1|
0.20    Scer|ChrIX|ref|NC_001141.1|
1.22    Scer|ChrI|ref|NC_001133.7|
0.08    Scer|ChrI|ref|NC_001133.7|
0.55    Scer|ChrVIII|ref|NC_001140.5|
0.07    Scer|ChrVIII|ref|NC_001140.5|
0.17    Scer|ChrVIII|ref|NC_001140.5|

そして、その特定の文字列の最初の列の値の合計を含む 2 番目の列の名前を含む出力ファイルが必要です。

Scer|ChrIX|ref|NC_001141.1|
1.69
Scer|ChrI|ref|NC_001133.7|
1.30
Scer|ChrVIII|ref|NC_001140.5|
0.79

で実行可能awkだと思いますが、正しい答えを出すこともフォーラムで見つけることもできませんでした

事前にどうもありがとうございました

4

1 に答える 1

3

awk:

awk '{a[$NF]+=$1}END{for(x in a) printf "%s\n%4.2f\n",x,a[x]}' file

サンプル データを出力します。

$ awk '{a[$NF]+=$1}END{for(x in a) printf "%s\n%4.2f\n",x,a[x]}' file
Scer|ChrVIII|ref|NC_001140.5|
0.79
Scer|ChrIX|ref|NC_001141.1|
1.69
Scer|ChrI|ref|NC_001133.7|
1.30

順番に出力が必要な場合:

awk 'seen==$2 { cnt+=$1 ; next }
     flag     { printf "%s\n%4.2f\n", seen,cnt ; flag=0 }
              { seen=$2 ; cnt=$1 ; flag=1 }
     END      { printf "%s\n%4.2f\n", seen,cnt}
' file
于 2013-06-20T20:35:44.330 に答える