我试图在未知数量的字段的输入行中进行排序:
输入:
ab bc
bc ab
cd ef bc
bc cd ef
cd bc ab
ef ab bc cd gh
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab cb cd
ab bc cd ef gh
我一直在使用类似的东西awk '{if($2 < $1) print $2,$1;else print}'
,但似乎它会在两个以上的字段上变得混乱。有什么帮助吗?
答案1
一种使用方法perl
:
perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
答案2
使用 GNU awk 的一种方法:
awk '{
split($0, arr);
asort(arr);
for (i=1; i<=length(arr); i++) {
printf "%s ", arr[i] };
printf RS
}
' infile
输出:
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
答案3
这是另一个perl
解决方案,类似于@Birei的答案,但更简洁:
$ perl -anle 'print "@{[sort @F]}"' file
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh
答案4
在 shell 脚本中:
while read n
do
echo $(echo $n | tr " " "\n" | sort )
done < infile
(分叉太多,更喜欢 perl 或 gnu awk 解决方案)