NR > var 조건의 awk 인쇄 명령

NR > var 조건의 awk 인쇄 명령

awk이 코드를 사용하여 일부 txt 파일을 수정하려고 합니다.

awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt

하지만 조건을 다음과 같이 바꿀 때까지는 작동하지 않았습니다 FNR>5.

그래서 여기에서 많은 것을 시도했지만 해결책을 찾지 못했습니다. 나는 "FNR>o"&를 넣었 FNR>$o지만 아무것도 넣지 않았습니다.

그러니 누군가 나를 도와줄 수 있나요? 입력 :

date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15   20
30   40
50   12
55   77

산출

r.txt   5  15   20
r.txt   5  30   40
r.txt   5  50   12
r.txt   5  55   77

답변1

문제:

FNR>o
  • >초기화되지 않은 값으로 연산자 사용
    • 초기화되지 않은 동안에는 o숫자 값 0과 빈 문자열의 문자열 값이 있습니다.
    • 스크립트에서 o는 으로 설정되지만 /^title/ { o=FNR+2 }/^title/번째 레코드까지는 나타나지 않습니다. 따라서 처음 두 레코드는 o초기화되지 않고 FNR>o다음과 같이 평가됩니다. true(왜냐하면 FNR==1& FNR==2are greater than zero)

가능한 해결책:

o && FNR>o
  • o0이 아니어야 함 을 지정 하십시오.FNR>o

또한 o단일 문자 변수 이름으로 다소 혼란스럽습니다. 대신에 다음과 같은 문자 n나 보다 설명적인 단어를 사용하는 것이 좋습니다.output


print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)

다음과 같이 단순화할 수 있습니다.

printf("%-10s %-10d %-10s\n",FILENAME,o,$0)

또는:

printf "%-10s %-10d %-10s\n",FILENAME,o,$0

관련 정보