2列内で一意の行数を計算する

2列内で一意の行数を計算する

データファイルがあり、そのいくつかは次のとおりです。

4 1
5 2
1 2
3 1
1 1
1 2
1 1
1 1
2 1
2 1

同様の行の数を計算し、次のように3番目の列に数を入力したいと思います。

    4 1 1
    5 2 1
    1 2 2
    3 1 1
    1 1 3
    2 1 2

どんな提案がありますか?

ベストアンサー1

これは一つの方法です。ファイルを並べ替えてから get count を使用してから、uniq -cフィールドawk順序反転を使用します。

$ sort file.txt | uniq -c | awk '{ print $2,$3,$1 }'
1 1 3
1 2 2
2 1 2
3 1 1
4 1 1
5 2 1
$

2番目の方法はpureを使用することですawk

$ awk '{ x[$0]++ } END { for(a in x) { print a,x[a] } }' file.txt
1 1 3
1 2 2
4 1 1
2 1 2
5 2 1
3 1 1
$

3番目の方法であるperl.は少し昔ながら/冗長なので、誰かがよりエレガントな方法を見せるのを待ってください。

$ perl -nle '$a{$_}++;END{for(keys %a) { print $_," ",$a{$_} } }' <file.txt
3 1 1
1 2 2
5 2 1
1 1 3
2 1 2
4 1 1
$

おすすめ記事