更改 uniq -c 输出的简单方法?
easy way to change the uniq -c output?
我有一个像这样的简单文件:
Term1 column2 column3
Term2 column2 column3
Term3 column2 column3
Term2 column2 column3
Term1 column2 column3
Term2 column2 column3
如果我对第一列进行排序并计算出字词:
cut -f1 -d ' ' file | sort | uniq -c
结果显示:
2 Term1
3 Term2
1 Term3
但我更愿意看到这个:
Term1 2
Term2 3
Term3 1
有没有一种简单的方法来 "change" uniq 输出来执行此操作,或者我是否仍需要将输出通过管道传输到 sed 或 awk 才能得到这个?
这似乎是一个简单的问题,如果之前有人问过这个问题,我深表歉意。
Uniq 没有提供重新排列输出的选项。
您可以使用 awk
执行此操作:
cut -f1 -d ' ' file | sort | uniq -c | awk '{print , }'
Term1 2
Term2 3
Term3 1
或者使用awk
然后排序(推荐)
$awk '{a[]++} END{for (i in a) print i,a[i] }' file | sort -k1
Term1 2
Term2 3
Term3 1
最短的GNU datamash工具:
datamash -Ws -g1 count 1 <file
输出:
Term1 2
Term2 3
Term3 1
我有一个像这样的简单文件:
Term1 column2 column3
Term2 column2 column3
Term3 column2 column3
Term2 column2 column3
Term1 column2 column3
Term2 column2 column3
如果我对第一列进行排序并计算出字词:
cut -f1 -d ' ' file | sort | uniq -c
结果显示:
2 Term1
3 Term2
1 Term3
但我更愿意看到这个:
Term1 2
Term2 3
Term3 1
有没有一种简单的方法来 "change" uniq 输出来执行此操作,或者我是否仍需要将输出通过管道传输到 sed 或 awk 才能得到这个?
这似乎是一个简单的问题,如果之前有人问过这个问题,我深表歉意。
Uniq 没有提供重新排列输出的选项。
您可以使用 awk
执行此操作:
cut -f1 -d ' ' file | sort | uniq -c | awk '{print , }'
Term1 2
Term2 3
Term3 1
或者使用awk
然后排序(推荐)
$awk '{a[]++} END{for (i in a) print i,a[i] }' file | sort -k1
Term1 2
Term2 3
Term3 1
最短的GNU datamash工具:
datamash -Ws -g1 count 1 <file
输出:
Term1 2
Term2 3
Term3 1