考虑以下输入和输出:
infile | outfile
1 3 5 2 4 | 1 2 3 4 5
2 4 5 | 2 4 5
4 6 2 1 | 1 2 4 6
是否有任何不涉及编程语言的 UNIX 程序组合——除了 shell 脚本本身——对文件每一行中的条目进行排序比以下方法更快:
while read line; do
tr ' ' '\n' <<< ${line} | sort | tr '\n' ' '
echo ""
done < infile > outfile
我的意思是,我可以创建一个小cpp/python/awk/...
程序来做到这一点,但这与使用通常的单行代码来神奇地解决问题不同。
编辑:
我一定是加了太多文字,而不是简单地问我想要什么;直截了当,我想确认是否有任何 UNIX 程序/程序组合(使用管道、fors、whiles ......)能够对一行中的条目进行排序,但没有上述一种解决方案那样的开销。
我知道我可能会在 perl、awk、python 之类的编程语言中完成令人讨厌的工作,但我实际上是在寻找不涉及这些语言解释器的 UNIX 程序组合。从答案中,我必须得出结论,没有这样inline sort
的工具,我非常感谢我所拥有的解决方案——主要是非常简洁的 Perl 单行。
然而,我并不真正理解我发布的 Bash 方法开销如此之大的原因。这真的是由于大量的上下文切换,还是仅仅是来回转换输入并对其进行排序的开销?
我似乎无法理解这些步骤中的哪一个会大大减慢执行速度。对大约 500k 行的文件中的条目进行排序需要几分钟,每行有大约 30 个值。