Sort
如何在 n 行之後對文件內容進行排序?
在 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 == 0
為NR == 3
在第三行而不是在第一個空白行處停止。為了避免其餘的都通過
awk
和sort
(也避免執行額外的 shellawk
來解釋那個瑣碎的sort
命令行),你可以這樣做:{ sed '/[^[:blank:]]/!q' sort } < file
sed
q
找到第一行不 (!
) 包含非空白字元的地方。在第三行更改為sed 3q
uit 。q
如果輸入不可搜尋(例如來自管道時),
sed
但是將無法將游標留在文件中該行的分隔符之後,這意味著sort
將錯過sed
可能已讀取的額外數據(如它以較大的塊讀取其輸入)。使用 GNU 實現
sed
,您可以添加-u
選項,使其一次讀取其輸入一個字節,以免讀取過多。