Sortir bidang sebaris


10

Saya mencoba mengurutkan dalam satu baris input ke sejumlah bidang yang tidak diketahui:

Memasukkan:

ab bc
bc ab
cd ef bc 
bc cd ef
cd bc ab
ef ab bc cd gh

Keluaran:

ab bc
ab bc
bc cd ef
bc cd ef
ab cb cd
ab bc cd ef gh

Saya telah menggunakan sesuatu seperti awk '{if($2 < $1) print $2,$1;else print}'tetapi sepertinya akan berantakan lebih dari dua bidang. Ada bantuan?

Jawaban:


8

Salah satu cara menggunakan perl:

perl -lane 'printf qq[%s\n], join q[ ], sort @F' infile

Keluaran:

ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh

2
karena Anda menggunakan -l, Anda tidak perlu mencetak baris baru. print join " ", sort @Fakan cukup.
glenn jackman

6

Salah satu cara menggunakan GNU awk:

awk '{ 
    split($0, arr); 
    asort(arr); 
    for (i=1; i<=length(arr); i++) { 
        printf "%s ", arr[i] }; 
        printf RS 
    }
' infile

Keluaran:

ab bc 
ab bc 
bc cd ef 
bc cd ef 
ab bc cd 
ab bc cd ef gh

2

Ini adalah perlsolusi lain , mirip dengan jawaban @ Birei tetapi lebih ringkas:

$ perl -anle 'print "@{[sort @F]}"' file
ab bc
ab bc
bc cd ef
bc cd ef
ab bc cd
ab bc cd ef gh

1

Dalam skrip shell:

while read n    
do
   echo $(echo $n | tr " " "\n" | sort )
done < infile

(Itu bercabang terlalu banyak, lebih suka perl atau solusi gnu awk)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.