혼란을 교정하라! [폐쇄]

혼란을 교정하라! [폐쇄]

이 파일의 내용을 포함하는 중괄호 문제입니다.

one one one

two two two

three 098234

one one one

two two two

three 098234

one one one

two two two

three 098234 ...

awk '{ a[NR]=$0 } END {b=0; for (i=1;i<=NR;i++) { b++; printf "%s",a[i]; if(b==3) {print"";b=0;}}}' file

산출:

one one onetwo two twothree 098234

four four fourfive five fivesix 092834
 ...

3줄을 연결하고 줄바꿈을 추가하세요!

이것이 작동하더라도 교정기의 필요성이나 배치가 올바르게 이해되지 않았습니다. 여기서 중괄호를 사용하고 동일한 결과를 얻는 다른 방법이 있습니까? 유사한 예를 많이 살펴봤지만 그 중 어느 것도 내가 원하는 결과를 얻지 못했습니다.

내 질문이 맞는지 확실하지 않지만 쉬운 방법이 있습니까?경험 법칙교정기에. 감사해요

답변1

awk귀하의 진술은 명시적인 줄 바꿈으로 더 잘 이해될 수 있습니다

awk '
         { a[NR]=$0 }    # Applies to every line of input

    END  {               # Executed once, when there is no more data
             b=0;
             for (i=1;i<=NR;i++) {
                 b++;
                 printf "%s",a[i];
                 if (b==3) {
                     print"";
                     b=0;
                 }
             }
         }
' file

세 줄의 데이터를 모두 연결해야 한다는 요구 사항에 따르면 이는 처리를 수행하기 전에 전체 파일을 읽기 때문에 매우 비효율적인 코드처럼 보입니다.

이것을 시도해 보세요. 한 번에 세 줄만 버퍼링됩니다.

awk '{s=s $0} NR>1&&!((NR)%3) {print s;s=""}' data

펼치면 이런 느낌

awk '
                    { s=s $0 }           # Append this line to the buffer
    NR>1 && !(NR%3) { print s; s="" }    # Print the buffer every three lines
' data

첫 번째 줄의 표현식은 (NR%3)세 번째 줄마다 0에 도달합니다. 이를 무효화 하여 세 번째 행마다 구성 요소 !만 트리거합니다.{...}

관련 정보