简单的方法来改变uniq -c输出?

时间:2017-10-17 10:03:20

标签: shell sorting awk sed uniq

我有一个这样的简单文件:

  

Term1 column2 column3
  Term2 column2 column3
  Term3 column2 column3
  Term2 column2 column3
  Term1 column2 column3
  第2栏第2栏第3栏

如果我对第一列进行排序并计算条款:

cut -f1 -d ' ' file | sort | uniq -c

结果告诉我:

  

2 Term1
  3 Term2
  1 Term3

但我宁愿看到这个:

  

Term1 2
  Term2 3
  Term3 1

有没有一种简单的方法可以“更改”uniq输出来执行此操作,还是需要将输出通过管道传输到sed或awk来获取此信息?

这似乎是一个简单的问题,所以如果之前有人问过我,我会道歉。

3 个答案:

答案 0 :(得分:3)

Uniq没有提供重新排列输出的选项。

您可以使用awk

执行此操作
cut -f1 -d ' ' file | sort | uniq -c | awk '{print $2, $1}'

Term1 2
Term2 3
Term3 1

或使用awk然后排序(推荐)

$awk '{a[$1]++} END{for (i in a) print i,a[i] }' file | sort -k1
Term1 2
Term2 3
Term3 1

答案 1 :(得分:2)

GNU datamash 工具中最短的工具:

datamash -Ws -g1 count 1 <file

输出:

Term1   2
Term2   3
Term3   1

答案 2 :(得分:0)

如果你想在单个awk中以及在Input_file中有Term字符串的相同顺序中执行此操作,那么以下内容可以帮助您。

awk '!b[$1]++{a[++i]=$1} {c[$1]=$1;d[$1]++} END{for(j=1;j<=i;j++){print c[a[j]],d[a[j]]}}'  Input_file

输出如下。

Term1 2
Term2 3
Term3 1