awk를 사용하여 한 줄의 단어를 역순으로 출력합니다.

awk를 사용하여 한 줄의 단어를 역순으로 출력합니다.

역순으로 라인을 출력하는 방법은 무엇입니까 awk? 나는 다음 구조를 사용합니다.

{
 for (i = NF; i > 1; i--){
 print $i
}
}

하지만 문자열에서 한 단어만 인쇄합니다.

앞으로:

apple pen dog cat

뒤쪽에:

cat dog pen apple

답변1

awk '
    {
        for (i=NF; i>=1; i--) {
            printf "%s%s", $i, i == 1 ? ORS : OFS
        }
     }
' file

답변2

사용레인:

perl -lane 'print join " ", reverse @F' file

답변3

OFS인쇄하기 전에 현재 레코드의 필드를 바꾸는 변형입니다( -v출력 필드 구분 기호가 명령줄(사용) 또는 코드의 다른 곳에 설정된 경우 현재 값이 사용됩니다 awk).

$ awk '{ for (i = 1; i < NF/2; ++i) { t = $i; $i = $(NF-i+1); $(NF-i+1) = t } }; 1' file
cat dog pen apple

기본 작업을 호출하는 조건부 단축 대신 awk명시적 코드를 사용하여 코드를 작성 하세요 .print1

{
    for (i = 1; i < NF/2; ++i) {
        # swap $i and $(NF-i+1)
        t = $i
        $i = $(NF-i+1)
        $(NF-i+1) = t
    }

    print
}

답변4

GNU를 사용 awk하고 필드 사이의 원래 간격을 유지하십시오.

gawk -v FPAT='[[:space:]]+|[^[:space:]]+' -v ORS= '
   {for (i = NF; i > 0; i--) print $i; print RT}'

입력 하면 " foo bar baz"출력됩니다 "baz bar foo ".

입력이 로케일에 대해 올바르게 인코딩된 텍스트라고 가정합니다.

입력에서 MS-DOS 줄 구분 기호를 사용하는 경우 캐리지 리턴(앞에 더 많은 공백이 올 수 있음)으로 시작하는 줄로 끝납니다. 다음을 통해 이를 조정 해야 할 수도 있습니다 -v RS='\r?\n' .

관련 정보