我正在使用unix sort对具有多个列的逗号分隔文件进行排序。到目前为止,这对于按数字或字母顺序对数据进行排序非常有效:
任何排序之前的示例文件:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
排序文件: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
排序结果:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
问题是:我想根据自定义排序对第2列进行排序,这意味着我要首先是美国,然后是加拿大,然后是巴哈马:
所需的排序:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
有什么方法可以通过unix排序,然后可以应用自定义排序顺序?就像是:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
谢谢!
在您的示例输入中,是否应该在最后一行
—
Lev Levitsky
t
而不是f
?
我更新了答案以匹配您的数据。
—
Lev Levitsky
join
命令,但是最终可能会导致很多排序-的输入文件join
必须按一个顺序排序,然后您将sort
再次使用它来将数据放入一个不同的顺序(并且在排序后步骤中丢失了排序顺序列)。