列 1 の固有値発生増分数を印刷する方法

列 1 の固有値発生増分数を印刷する方法

この問題を解決しようとしていますが、数を増やしてからタブ区切りのテキストファイルの列1にある固有値の数を印刷する必要があります。例は次のとおりです。

Apple_1   1      300
Apple_2   1      500
Apple_2   500    1500
Apple_2   1500   2450
Apple_3   1      1250
Apple_3   1250   2000

希望の出力は次のとおりです。

Apple_1   1      300     1
Apple_2   1      500     1
Apple_2   500    1500    2
Apple_2   1500   2450    3
Apple_3   1      1250    1
Apple_3   1250   2000    2

NRを印刷してawkから行番号を印刷できることを知っていますが、列1の各固有値に対してそれらをリセットする方法がわかりません。

あなたが提供できる助けに感謝します。

ベストアンサー1

この種の問題を解決するためのAwkの標準的なトリックは、関連付けカウンタ配列を使用することです。

awk '{ print $0 "\t" ++count[$1] }'

各行の最初の単語が表示される回数を計算します。これはまさにあなたが要求したものではありません。なぜなら

Apple_1   1      300
Apple_2   1      500
Apple_1   500    1500

生産します

Apple_1   1      300     1
Apple_2   1      500     1
Apple_1   500    1500    2

(ご覧のように、の数はApple_1リセットされませんApple_2。)しかし、入力がソートされていれば大丈夫です。

それ以外の場合は、カウンターと最後に見たキーを追跡する必要があります。

awk '{ if (word == $1) { counter++ } else { counter = 1; word = $1 }; print $0 "\t" counter }'

おすすめ記事