Sort

如何在 n 行之後對文件內容進行排序?

  • March 5, 2022

在 linux 中,我們可以執行sort命令對文件內容進行排序,但在我的情況下,我有以下文件(THANKS.txt):

These people have contributed to OSN Envoy. We always try to keep this list updated and correct. 
If you notice that your name is not listed here, then feel free to contact us.

Ar Rakin
Peter Williamson
David Brook
Bill Natt

此文件包含軟體項目的貢獻者列表。

我只想使用sort命令按字母順序對名稱進行排序,有什麼想法嗎?

awk

awk '
 NR == 1, NF == 0 {
   # print and skip all lines until the first blank
   # one (one where the Number of Fields is 0)
   print; next
 } 

 {print | "sort"} # pass the rest to sort
 ' < file

替換NF == 0NR == 3在第三行而不是在第一個空白行處停止。

為了避免其餘的都通過awksort(也避免執行額外的 shellawk來解釋那個瑣碎的sort命令行),你可以這樣做:

{
 sed '/[^[:blank:]]/!q'
 sort
} < file

sed q找到第一行不 ( !) 包含非空白字元的地方。在第三行更改為sed 3quit 。q

如果輸入不可搜尋(例如來自管道時),sed但是將無法將游標留在文件中該行的分隔符之後,這意味著sort將錯過sed可能已讀取的額外數據(如它以較大的塊讀取其輸入)。

使用 GNU 實現sed,您可以添加-u選項,使其一次讀取其輸入一個字節,以免讀取過多。

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