在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

请提出一些解决方案。

答案1

你可以使用 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 " ", ...结果缝合在一起,并用空格字符分隔。

思考sort默认情况下,Perl 会忽略您的语言环境,因此您可以LC_COLLATE=C免费获得。

相关内容