awk NR%2{}1 의미

awk NR%2{}1 의미

나는 이 코드를 이해하려고 노력 중입니다.

awk 'NR%2{printf "%s ",$0;next;}1' yourFile

이제 맞춤화해보려고 합니다.

이 error.txt의 내용을 고려하면 다음과 같습니다.

KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

그 다음에:

awk 'NR%2{printf NR "%s ", $0; next}1' error.txt

... 반환됩니다:

1KEY 4048:1736 string 3
3KEY 0:1772 string 1
5KEY 4192:1349 string 1
7KEY 7329:2407 string 2
9KEY 0:1774 string 1

짝수 줄 번호를 참조하는 것 같은데 , 그것이 무엇을 참조하는지 NR%2잘 모르겠습니다 . 그렇지 않은 경우 행 이 반환됩니다.1
1awk 'NR%2{printf NR "%s ", $0; next}' error.txt

1KEY 4048:1736 string 3KEY 0:1772 string 5KEY 4192:1349 string 7KEY 7329:2407 string 9KEY 0:1774 string 

전반적으로 아직 이해가 안 되네요.

지금까지 다음 페이지를 살펴보았습니다.

답변1

그건%모듈로/나머지 산술 연산자, 두 개 이상의 숫자로 구성된 모듈식 분할을 찾습니다. 여기서는 NR현재 레코드 번호를 2로 나눈 것을 의미하며 다음과 같이 기록됩니다.조건문, 짝수 레코드의 결과는 0이므로 0은 오류 결과이므로 다음과 같습니다.행동수행되지 않았으며;

마지막으로 1"항상 참" 조건이라는 관용구가 구현되어 처음 몇 줄의 끝에 짝수 줄 번호를 인쇄합니다( NR%2결과가 0인 동안 실행). 여기서 이러한 줄 번호는 printf개행 없이 인쇄됩니다. 바라보다awk 스크립트 끝에 있는 "1"은 무엇을 의미합니까?

답변2

을 찾다많은더 나은 포괄적인 솔루션:

gawk/mawk/nawk '(ORS=ORS?"":"\n")~_'

기본적으로 awk는 ORS항상 one 을 미리 채우므로 이 방법은 빈 문자열에 대해 ORS를 테스트해야 할 때 시간을 낭비 \n할 필요 없이 항상 짝수 행이 그 위의 행에 연결되도록 보장합니다 .NR % 2

==========다음은 예전 글입니다=================================

다음과 같은 모든 항목 없이 조건을 내부로 가져올 수 있습니다.

gawk/mawk/nawk '{ printf("%s%c",$0,23^(NR%2)+9) }'

홀수 행에서는 NR%21(true)로 평가됩니다.

  • so 23^1+9 = 32 = ascii space.

짝수 행의 경우 0/false를 얻습니다.

  • so 23^0+9 = 1+9 = 10 = ascii new line \n

관련 정보