인라인 정렬 필드

인라인 정렬 필드

필드 개수를 알 수 없는 입력 행을 정렬하려고 합니다.

입력하다:

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

쉘 스크립트에서:

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

(포크가 너무 많습니다. Perl 또는 Gnu awk 솔루션을 선호합니다)

관련 정보