Linux

在linux詞典中水平排序文件

  • June 23, 2021

我有一個像下面的文件有多個行和列,

a x1.1 x1.2 x1.10 x1.11

我想在文件中從第二個開始的列中進行字典排序。因此,每一行的輸出應該是,

a x1.1 x1.10 x1.11 x1.2 

我使用過,LC_ALL=C sort /path_to_file/file但它沒有提供所需的輸出。例如,對於多行,

input
a x1.1 x1.2 x1.10 x1.11
b x1.2 x1.3 x1.10 x1.11
a x1.10 x1.20 x1.13 1.12

desired output
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20

getting output
a x1.1 x1.2 x1.10 x1.11
a x1.10 x1.20 x1.13 x1.12
b x1.2 x1.2 x1.10 x1.11

請提出一些解決方案。

你可以使用 Perl:

$ perl -alpe '$_ = join " ", shift @F, sort @F' input
a x1.1 x1.10 x1.11 x1.2
b x1.10 x1.11 x1.2 x1.3
a x1.10 x1.12 x1.13 x1.20

該腳本循環輸入的行。-a導致輸入行在空白處被拆分為預設數組@Fshift @F切掉第 0 個元素(將其從排序中排除),然後sort @F對剩餘的元素進行排序 - 預設情況下按字典順序排列。將join " ", ...結果縫合在一起,由空格字元分隔。

認為Perlsort預設會忽略您的語言環境,因此您可以LC_COLLATE=C免費獲得。

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