Sort

Linux對多列進行排序和剪切

  • November 13, 2021

我有以下名為“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

我需要使用cutandsort來僅顯示已排序的帶有平面和名稱的列。這意味著我必須留下:

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. 然後我們刪除中間文件。

引用自:https://unix.stackexchange.com/questions/677321