Text-Processing

如何按字母順序對文件的各個部分進行排序?

  • June 18, 2020

我有幾個部分的文件,每個部分都以特定的標題開頭,但所有部分都以相同的字元串結尾,我想根據標題對文件部分進行排序,而不是對每個部分的內容進行排序(即以整個部分為一個塊)每兩個部分之間還有一個空行,以闡明輸入是否為

string5
z
y
x
string

string2
x
z
y
f
string

所需的輸出將是

string2
x
z
y
f
string

string5
z
y
x
string

使用 GNUsedsort

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相關問題

在段落模式下使用 GNUawk並在字元串模式下對數組的值進行排序,然後列印:

awk -v RS= '{ seen[NR]=$0 }
END { PROCINFO["sorted_in"]="@val_str_asc";
     for (block in seen) {print sep seen[block]; sep=ORS}
}' infile

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