![在linux字典中水平排序文件](https://linux22.com/image/15540/%E5%9C%A8linux%E5%AD%97%E5%85%B8%E4%B8%AD%E6%B0%B4%E5%B9%B3%E6%8E%92%E5%BA%8F%E6%96%87%E4%BB%B6.png)
我有一个如下所示的文件,有多个行和列,
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
导致输入行在空白处拆分为默认数组@F
。shift @F
切掉第 0 个元素(将其从排序中排除),然后对sort @F
剩余元素进行排序 - 默认情况下按字典顺序排序。将join " ", ...
结果缝合在一起,并用空格字符分隔。
我思考sort
默认情况下,Perl 会忽略您的语言环境,因此您可以LC_COLLATE=C
免费获得。