列データの順序をアルファベット順に変更したい
入力する
c,a,b
e,k,d
出力
a,b,c
d,e,k
現在、以下のコードを使用しています
awk -F"," -v OFS="," '{
if($1<=$2 && $2<=$3)
{print $1,$2,$3}
else if($1<=$2 && $3<=$2)
{print $1,$3,$2}
else if($2<=$1 && $1<=$3)
{print $2,$1,$3}
else if($2<=$1 && $3<=$1)
{print $2,$3,$1}
else if($3<=$2 && $2<=$1)
{print $3,$2,$1}
else
{print $3,$1,$2}}' test.txt
4つ以上の列を持つファイルを処理するためのより簡単なソリューションを提供できますか?
ベストアンサー1
同意する場合perl
:
$ perl -F, -lane 'print join ",", sort @F' ip.txt
a,b,c
d,e,k
-F,
区切り文字に分割する入力行を指定し、,
結果は@F
配列として提供されます。
sort @F
join
アルファベット順にソートされ、結果の配列は,
区切り文字を使用して結合されます。
そしてGNU awk
$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_str_asc"}
{s = ""; c=0; split($0,a,",");
for(k in a) s = c++ ? s "," a[k] : a[k];
print s}' ip.txt
a,b,c
d,e,k
バラよりgawk マニュアル: 事前定義された配列スキャン順序の使用上記で使用した配列の並べ替えに関する詳細