2017-09-24 3 views
-2

나는이 정규 표현식 변수해야 awk 명령에 정규 표현식을 사용하기 위해 노력하고있어, 나는 awk 명령을사용 구성된 정규 표현식 변수

예를 호출하기 전에 그것을 바꿀 수 : gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/word1|word2/' file1.log

이 나를 위해 일

, 이것은 모든 라인은 다음 "새로운 라인"

내가하고 싶은 것은에 마지막으로 "새로운 라인"에서 words1 또는 word2 포함 된 변수에 단어 1과 word2를 넣어 인쇄 명령 및 gawk에서 사용하십시오.

예를 들어210

:

정규식 = "단어 1 | word2" gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

정규식을 변경할 수 있습니다

내 프로그램 에 따라 내가 검색 많은 솔루션을 시도했지만 아무것도 나를

솔루션을 위해 일하지 I 시도 :

1) regex = "word1 | word2"; gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$regex/' file1.log

2) 정규식 = "단어 1 | word2" gawk -v pat="$regex" 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/pat/' file1.log

3) 정규식 = "단어 1 | word2" gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} {pat=$regex} s~/pat/' file1.log

4) 정규식 = "단어 1 | word2" echo $regex | gawk 'BEGIN{RS=ORS="\n\n" {s=tolower($0)} s~/$1/' file1.log

미리 감사드립니다!

답변

3

다음 내용을 시도해보고 도움을 받으시겠습니까?

문자열을 하나의 변수로 유지하고 awk에서 정규식으로 사용하려면 다음을 사용하면 동일하게 도움이 될 수 있습니다. 몇 가지 포인트도 여기에있다

regex='word1|word2' 
awk -v reg="$regex" 'tolower($0) ~ reg' Input_file 

있습니다

I- 당신은 그렇게하지만 내 직감이 작동합니다입니다 테스트 할 수있는 샘플 INPUT_FILE 데이터를 제공하지 않았으므로.

II-는 그런 다음 당신은 당신의 코드에서 그 부분을 제거 할 수 있도록 그들이 새로운 라인으로 설정되어 기본 자체로 중복 awk의 BEGIN 섹션에 \nRSORS을 언급했다.

+0

안녕하세요,이 일했다,하지만 난 사용하고자하는 awk 명령 전에 설정할 수있는 1 개의 변수, 다음 반복 word1, word2, word3 및 word4에있을 수 있기 때문에 –

+0

내 편집을 한 번 확인하고 awk에 변수를 추가했습니다. awk에는 여러 문자열이있을 수 있습니다. 이게 도움이되는지 알려주세요. – RavinderSingh13

+1

작동! 감사! –

0

당신이 복합 표현식으로 입력을 원하는 경우에 당신은 또한 내가 추측이 일 할 수있는 :

awk -v pat="$regex" '{split(regex, a, "|")}tolower($0) ~ a[1] || tolower($0) ~ a[2]' 

이 당신의 정규식 입력 가정 : regex="word1|word2"

+0

상자 awk는 RS의 값과 새 행의 ORS를 가지므로 여기서는 BEGIN 섹션에서 설정할 필요가 없습니다. – RavinderSingh13

+0

힌트 : Thx – JFS31