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==2greater than zero

가능한 해결책:

o && FNR>o
  • 사양은 o0이 아니어야 합니다.FNR>o

또한 o단일 문자 변수 이름은 다소 혼란스럽습니다. 대신 like 문자 n나 더 설명적인 단어 like를 사용하는 것이 좋습니다.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

관련 정보