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==2
greater than zero
- 초기화되지 않았지만
가능한 해결책:
o && FNR>o
- 사양은
o
0이 아니어야 합니다.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