Awk: 줄 번호와 단어 수를 사용하여 줄을 뒤로 인쇄합니다.

Awk: 줄 번호와 단어 수를 사용하여 줄을 뒤로 인쇄합니다.

awk 명령을 사용하여 내가 만든 파일 뒤에 라인 3-5를 표시하고 출력 라인 앞에 라인 번호를 표시하고 싶습니다(예: 라인 3: ). 또한 세 줄 모두의 총 단어 수를 표시하고 싶습니다. 내 코드는 아래에 제공됩니다. "%s"에 대한 오류 메시지가 계속 표시되지만 여기서 어디로 가야 할지 모르겠습니다. 도움이 필요하십니까?

BEGIN { print("<< Start of file >>"); }

NR>=3 && NR<=5 { for (i = NF; i >= 1; i--)

                printf "%d: %s ", $i;
                print ""
                wordCount += NF;


}



END { printf "<< End of file: wordCount = %d >>\n", wordCount }

입력 파일은 다음과 같습니다.

Gimme presents I want more!
Gimme presents, I did my chores!
A bicycle, a tricycle, a motor vehicle!
I deserve it, you reverse it!
Gimme presents; more, more, more
Gimme presents I need more!

내가 얻는 결과는 다음과 같습니다.

(FILENAME=presents FNR=3) fatal: not enough arguments to satisfy format string
        `%d: %s '
             ^ ran out for this one

답변1

코드 오류 부분

중요한 문제는 형식이 있지만 형식 지정자와 일치할 수 있는 인수는 match 이지만 match 는 아닌 %d: %s인수 하나만 일치할 수 있다는 것입니다 .$i$i%d%s

스크립트를 다음과 같이 변경하면:

#!/usr/bin/awk -f

BEGIN { print("<< Start of file >>"); }

NR>=3 && NR<=5 { 
    for (i = NF; i >= 1; i--)
        printf "%d: %s ", i,$i;
    print ""
    wordCount += NF;


}

END { printf "<< End of file: wordCount = %d >>\n", wordCount }

그러면 오류가 없으며 다음 출력이 생성됩니다.

$ ./awk_script.awk input.txt
<< Start of file >>
7: vehicle! 6: motor 5: a 4: tricycle, 3: a 2: bicycle, 1: A 
6: it! 5: reverse 4: you 3: it, 2: deserve 1: I 
5: more 4: more, 3: more, 2: presents; 1: Gimme 
<< End of file: wordCount = 18 >>

원하는 동작과 일치하도록 코드 수정

그러나 귀하의 설명은 다음과 같습니다.

내가 만든 파일 뒤에 라인 3-5를 표시하고 출력 라인 앞에 라인 번호도 표시하고 싶습니다(예: 라인 3:).

이는 for 루프를 사용하여 각 필드를 처리하기 전에 행 번호를 출력해야 함을 의미합니다.

#!/usr/bin/awk -f

BEGIN { print("<< Start of file >>"); }

NR>=3 && NR<=5 {
    printf "line %d:",NR; # display line number first
    for (i = NF; i >= 1; i--)
        printf " %s ", $i;
    print ""; 
    wordCount += NF;

}

END { printf "<< End of file: wordCount = %d >>\n", wordCount }

작동 방식은 다음과 같습니다.

$ ./awk_script.awk input.txt
<< Start of file >>
line 3: vehicle!  motor  a  tricycle,  a  bicycle,  A 
line 4: it!  reverse  you  it,  deserve  I 
line 5: more  more,  more,  presents;  Gimme 
<< End of file: wordCount = 18 >>

관련 정보