Text-Processing
如何按字母順序對文件的各個部分進行排序?
我有幾個部分的文件,每個部分都以特定的標題開頭,但所有部分都以相同的字元串結尾,我想根據標題對文件部分進行排序,而不是對每個部分的內容進行排序(即以整個部分為一個塊)每兩個部分之間還有一個空行,以闡明輸入是否為
string5 z y x string string2 x z y f string
所需的輸出將是
string2 x z y f string string5 z y x string
使用 GNU
sed
和sort
:sed 's/^$/\x0/g' file | sort -z | tr '\0' '\n'
- 將空字元放在空行中
sort
使用空字元作為分隔符 (-z
)- 最後使用 . 將空分隔符替換為新行
tr
。- 要刪除輸出的第一行和最後一行中的空行,您可以添加
| sed '1{/^$/d};${/^$/d}'
輸出:
string2 x z y f string string5 z y x string
(也許有人可以幫助
\x0
為非 GNU 工作sed
,相關問題)
在段落模式下使用 GNU
awk
並在字元串模式下對數組的值進行排序,然後列印:awk -v RS= '{ seen[NR]=$0 } END { PROCINFO["sorted_in"]="@val_str_asc"; for (block in seen) {print sep seen[block]; sep=ORS} }' infile