인라인으로 필드 정렬


10

알 수없는 필드 수의 입력 줄 내에서 정렬하려고합니다.

입력:

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}'했지만 두 개 이상의 필드에서 지저분해질 것 같습니다. 어떤 도움?

답변:


8

한 가지 방법으로 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
를 사용 -l하고 있으므로 개행을 인쇄 할 필요가 없습니다. print join " ", sort @F충분할 것입니다.
glenn jackman

6

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

2

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

1

쉘 스크립트에서 :

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

(포크가 너무 많으면 perl 또는 gnu awk 솔루션을 선호하십시오)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.