Chr*_*ris 10 awk text-processing sort
我正在尝试在一行输入中对未知数量的字段进行排序:
输入:
ab bc
bc ab
cd ef bc
bc cd ef
cd bc ab
ef ab bc cd gh
Run Code Online (Sandbox Code Playgroud)
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab cb cd
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)
我一直在使用类似的东西,awk '{if($2 < $1) print $2,$1;else print}'
但似乎它会在两个以上的领域变得混乱。有什么帮助吗?
一种使用方式perl
:
perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile
Run Code Online (Sandbox Code Playgroud)
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)
使用 GNU awk 的一种方法:
awk '{
split($0, arr);
asort(arr);
for (i=1; i<=length(arr); i++) {
printf "%s ", arr[i] };
printf RS
}
' infile
Run Code Online (Sandbox Code Playgroud)
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
Run Code Online (Sandbox Code Playgroud)