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
aregreater than zero
)
- 초기화되지 않은 동안에는
가능한 해결책:
o && FNR>o
o
0이 아니어야 함 을 지정 하십시오.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