Yan*_*ang 7 sorting bash shell
我有一个文本文件:
$ cat text
542,8,1,418,1
542,9,1,418,1
301,34,1,689070,1
542,9,1,418,1
199,7,1,419,10
Run Code Online (Sandbox Code Playgroud)
我想根据第一列对文件进行排序,并使用删除重复项sort,但事情并没有按预期进行.
$ sort -t, -u -b -k1n text
542,8,1,418,1
542,9,1,418,1
199,7,1,419,10
301,34,1,689070,1
Run Code Online (Sandbox Code Playgroud)
它不是基于第一列进行排序.
$ sort -t, -u -b -k1n,1n text
199,7,1,419,10
301,34,1,689070,1
542,8,1,418,1
Run Code Online (Sandbox Code Playgroud)
它会删除该542,9,1,418,1行,但我想保留一份副本.
似乎第一种方法正确地删除了重复但没有排序,而第二种方法排序正确但删除了超出我想要的数量.我该如何得到正确的结果?
问题是,当您提供 a 时,系统会查找该特定字段的唯一出现次数key。由于显示了sort该行,因此会将接下来的两行视为重复,并将其过滤掉。542,8,1,418,1sort542
您最好的选择是对所有列进行排序:
sort -t, -nk1,1 -nk2,2 -nk3,3 -nk4,4 -nk5,5 -u text
Run Code Online (Sandbox Code Playgroud)
或者
用于awk过滤重复行并将其通过管道传输到sort.
awk '!_[$0]++' text | sort -t, -nk1,1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8199 次 |
| 最近记录: |