Sort
Linux對多列進行排序和剪切
我有以下名為“info”的文件:
White:73:Mars:1543:Manuel Green:17:Jupiter:1968:Sebastian Blue:24:Venus:1970:Anna Red:35:Neptune:1122:Javier Yellow:135:Earth:1234:Raymond
我需要使用
cut
andsort
來僅顯示已排序的帶有平面和名稱的列。這意味著我必須留下:Earth:Anna Jupiter:Javier Mars:Manuel Neptune:Raymond Venus:Sebastian
我嘗試使用
cut -d: -f3,5 info | sort -t: -k1,1 -k2,2
,但它只對第一列而不是第二列進行排序。我也嘗試過
cut -d: -f3,5 info | sort -t: -k1,1 -k2,2 | sort -t: -k2,2
,但這僅對第二列進行了排序。任何和所有的幫助表示讚賞
單獨對列進行排序:
paste -d: <(cut -d: -f3 info | sort) <(cut -d: -f5 info | sort) Earth:Anna Jupiter:Javier Mars:Manuel Neptune:Raymond Venus:Sebastian
由於結果由兩個單獨排序的數據列組成,因此需要對 進行兩次呼叫
sort
,每次呼叫都有一組單獨的數據。nezabudka的回答顯示瞭如何在理解程序替換的 shell 中做到這一點:
paste -d : \ <( cut -d : -f 3 info | sort ) \ <( cut -d : -f 5 info | sort ) \ >outfile
以上假設您要將輸出保存到名為
outfile
.在不理解程序替換的 shell 中(您在問題中沒有提到特定的 shell),可以使用中間文件分兩步執行此操作:
cut -d : -f 3 info | sort > outfile.tmp cut -d : -f 5 info | sort | paste -d : outfile.tmp - >outfile rm outfile.tmp
第一個管道創建行星排序名稱的初始列。它將排序後的數據重定向到文件
outfile.tmp
。第二個管道以與第一個管道類似的方式創建第二個列,並將其附加到第一個使用paste
. 然後我們刪除中間文件。