텍스트 파일에서 문자열을 검색하고 매치마다 증가하는 숫자가 포함 된 대체물을 만들어야합니다.awk (gawk)와 관련된 문제
"찾을"문자열은 단일 문자 또는 단어 또는 구일 수 있습니다.
대체 표현식이 항상 같지는 않지만 (아래 예제에서와 같이) 항상 증가하는 숫자 (변수)가 포함됩니다. 예를 들어
:
1) 나는 "data.txt로"라는 이름의 테스트 파일이 있습니다. 파일에 다음이 포함되어 있습니다.
2) awk 스크립트를 "cmd.awk"라는 파일에 저장했습니다. 이 파일에는 다음이 포함
이Now is the time
f(1)or all good men
to come to the
aid of(2) their party.
문제는 더있다 올 때 :이 경우
awk -f cmd.awk data.txt
는, 출력이 예상과 같이
/f/ {sub ("f","f(" ++j ")")}1
3) 나는이 같은 AWK 사용 한 줄에 한 경기 이상 예를 들어, 내가 문자를 검색 할 경우 "I"와 같은 :
/i/ {sub ("i","i(" ++j ")")}1
출력은 다음과 같습니다 잘못
Now i(1)s the time
for all good men
to come to the
ai(2)d of their party.
이가 "I" "시간"에 포함되어 있지 않기 때문에 또는 "그들의".
그래서, 내가 좋아하는 대신 "하위"의 "GSUB"시도 :
/i/ {gsub ("i","i(" ++j ")")}1
을 출력은 다음과 같습니다
이Now i(1)s the ti(1)me
for all good men
to come to the
ai(2)d of thei(2)r party.
지금은 편지의 모든 발생을 교체하게 "I" 삽입 된 숫자는 같은 줄에있는 모든 일치 항목에 대해 동일합니다.
원하는 출력은 다음과 같아야합니다
Now i(1)s the ti(2)me
for all good men
to come to the
ai(3)d of thei(4)r party.
참고 :
awk -f cmd.awk -v j=26 data.txt
출력을 얻으려면 : 수는 항상이 같은 AWK를 사용할 수 있습니다 "1"로 시작하지 않을 것이다 :
Now i(27)s the ti(28)me
for all good men
to come to the
ai(29)d of thei(30)r party.
그리고 분명히 알 수 있듯이 대체 할 숫자가 항상 괄호 안에있는 것은 아닙니다. 대체 문자열에는 항상 일치하는 문자열이 포함되지는 않습니다 (실제로는 매우 드뭅니다).
에 대한 I이가 함께 데 다른 문제 ...
내가 AWK 변수 (환경하지 변수)를 사용하고자하는 "문자열 검색", 그래서 나는 awk 명령 줄에서 지정할 수 있습니다 .예를 들어
는 :
1) 나는 "cmd.awk"라는 이름의 파일에 awk 스크립트를 배치했다.
/??a??/ {gsub (a,a "(" ++j ")")}1
2)는 다음과 같이 AWK를 사용합니다 :
awk -f cmd.awk -v a=i data.txt
출력을 얻으려면 : 파일 같은 것을 포함
Now i(1)s the ti(2)me
for all good men
to come to the
ai(3)d of thei(4)r party.
여기서 문제는, 내가 표현 어떻게입니다/검색/표현식의 변수 "a"?
Windows 명령 줄에서 작동하게하려면 따옴표를 사용해야했습니다. awook BEGIN {FS = \ "i \"; OFS = \ "i \"; k = 0} {for (i = 2; i <= NF; i ++) $ i = \ "(\"++ k \ ") \"$ i} 1 ""data.txt ". 변수 "i"의 일부 사용이 "$"("$ i")로 시작되는 이유를 설명 할 수 있습니까? –
변수는 $ -sign을 사용하지 않지만 필드 ($ 1, $ 2, ..)는 레코드 자체 ($ 0)를 수행합니다. 그러나 i = 5 일 경우 $ i는 $ 5를 의미합니다. – Scrutinizer
@KevinFegan은 Windows의 명령 줄에서 awk 스크립트를 사용하지 마십시오. 찾은대로 인용 및 다른 문제가 발생합니다. 대신 스크립트를 "foo.awk"라는 파일에 넣고 awk -f foo.awk data.txt로 실행하십시오. 스크립팅을위한 Windows라는 악몽을 피하기 위해 cygwin을 설치하는 방법을 살펴볼 수 있습니다. –