フィールド数が不明な入力行を並べ替えようとしています。
入力する:
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}'
2つ以上のフィールドで問題が発生しているようです。助けが必要ですか?
答え1
それを使用する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を使用する1つの方法:
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
シェルスクリプトから:
while read n
do
echo $(echo $n | tr " " "\n" | sort )
done < infile
(フォークが多すぎます。PerlまたはGnu awkソリューションを好む)