根据第1列和第2列的值排序数据,只输出第1列和第2列的uniq值

时间:2016-12-30 20:38:36

标签: shell sorting

我有一个包含以下数据的输入文件:

AUD 100 20
USD 200 30
INR 10  20
AUD 100 30
USD 200 40
EUR 50  60
EUR 50  70
AUD 100 11
USD 200 55
INR 10  35

我跑:

cat filename | sort -u -k1,2

它给出了如下输出:

AUD 100 20
EUR 50  60
INR 10  20
USD 200 30

所以我理解的是sort -u k1,2 对数据进行排序,并根据第1列和第2列中值的唯一组合给出输出。现在基于这种理解,我运行:

  cat filename |  sort -u -k1 

根据第1列中的唯一值获取输出。所以我期待这个输出:

AUD 100 20
EUR 50  60
INR 10  20
USD 200 30

但实际输出是:

AUD 100 11
AUD 100 20
AUD 100 30
EUR 50  60
EUR 50  70
INR 10  20
INR 10  35
USD 200 55
USD 200 30
USD 200 40

有人可以解释一下sort -u -km,n选项的用途吗?

1 个答案:

答案 0 :(得分:2)

键字段编号使用-k <start>,<end>指定。如果您未指定<end>,则默认为行结束。所以:

sort -u -k 1 filename

将根据整行对单个值进行排序和打印。如果您只想考虑第一个密钥(您的预期结果):

sort -u -k 1,1 filename

P.S。你真的不必将cat输出到sort ......