shell - 根据第 1 列和第 2 列的值对数据进行排序,并仅输出第 1 列和第 2 列的唯一值

标签 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 是怎么回事吗?选项?

最佳答案

键字段编号由 -k <start>,<end> 指定.如果不指定 <end>它默认为 行尾 .所以:

sort -u -k 1 filename

将根据 排序和打印唯一值全线 .如果您只想考虑第一个键(您的预期结果),您必须:
sort -u -k 1,1 filename

附言你真的不必管cat输出到 sort ...

关于shell - 根据第 1 列和第 2 列的值对数据进行排序,并仅输出第 1 列和第 2 列的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41402419/

相关文章:

bash - 第一次使用 getopts 运行脚本有效,但第二次运行它时不起作用

linux - bash shell脚本问题中的日期格式错误帮助

c++ - 实现计数排序

sorting - Delphi:存储TObjectList的多个排序

php - PHP 和 MySQL 中的实时搜索(不适用于数组?)

algorithm - 使用递归查找数组中的第二大元素

c++ - 制作 : setting up a complex prerequisit list

linux - printf 脚本中的格式问题

linux - 遍历每一行

algorithm - 如何使用快速排序获取 n 个奇数元素的中位数?