2

次のようなデータファイルがあります。

82 DEX26_28_h
82 DEX26_28_h
873 DEX34_h
89 DEX37_h
1 DEX34_h

そして、列 to の各項目 (17 個の一意) が互いに隣り合うように、$2 で並べ替えるつもりです。次に、$2 につながれている間に $1 のすべての # を合計したいと思います

上記のテストファイルの理想的な結果:

164 DEX26_28_h
874 DEX34_h
89 DEX27_h

わかる?基本的に、各サンプル ($2) で発生するシーケンスの総数 ($1) を合計する必要があり、合計を維持しながら uniq は $2 のみです。最終結果が合計17行になるようにします。

$2 の 17 の Identifies ごとに grep を実行し、 awk を使用してそれらを合計する必要がありますか?

皆さんはどう思いますか?

4

1 に答える 1

2

awk で配列を使用して合計を行うことができます。

awk '{arr[$2]+=$1} END {for (i in arr) {print arr[i],i}}'

次に、パイプして後で並べ替えることができます。


これが何をするか:

  • arr[$2]+=$1:インデックス (キー) を持つ$1配列内の要素にの値を追加します。(以前は未定義の要素は便利に 0 として定義されていたので、キーが「存在する」かどうかを気にせずにここで実行できます。) 配列に慣れていない場合、これは基本的に、に基づいてメモリ内にルックアップ テーブルを作成することです。あなたのフィールド。arr$2+=$2

  • END...:処理の最後に1回行う

  • for (i in arr): 配列内のすべてのキーに対して、arrその要素を次のブロックに割り当ててiコードを実行します。

  • print arr[i],i: 最初に key の値を出力arri、次にキーi自体を出力します。

于 2012-10-26T18:21:17.340 に答える