Shell 根据第1列和第2列的值对数据进行排序,并仅输出第1列和第2列的uniq值

Shell 根据第1列和第2列的值对数据进行排序,并仅输出第1列和第2列的uniq值,shell,sorting,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-uk1,2 对数据进行排序,并根据

我有一个输入文件,其中包含以下数据:

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-uk1,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

有人能解释一下排序-u-km,n选项的情况吗?

键字段号是用
-k,
指定的。如果未指定
,则默认为行结束。因此:

sort -u -k 1 filename
将基于整行对唯一值进行排序和打印。如果你只想考虑第一个键(你期望的结果):

sort -u -k 1,1 filename

另外,您实际上不必将
cat
输出输送到
sort

带有
-k
m,n
表示
sort
键的开始和结束字段。使用
sort-k1
,排序键对从
1
到结尾的所有字段都有效,因此您可以看到结果。您需要
sort-k1,1
另一种无用的cat:)您可以直接将文件名传递给sort命令。不需要cat file | sort。谢谢iruvar,但是如果我用sort-u-k1对数据进行排序,2 sort如何决定第三列的哪个值要打印?
-u
意味着稳定排序,因此它是每个集合中返回的具有相同键的第一条记录