Linux
在linux詞典中水平排序文件
我有一個像下面的文件有多個行和列,
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
導致輸入行在空白處被拆分為預設數組@F
。shift @F
切掉第 0 個元素(將其從排序中排除),然後sort @F
對剩餘的元素進行排序 - 預設情況下按字典順序排列。將join " ", ...
結果縫合在一起,由空格字元分隔。我認為Perl
sort
預設會忽略您的語言環境,因此您可以LC_COLLATE=C
免費獲得。