awk에서 ‘(‘(공백 다음에 괄호)을 필드 구분 기호로 사용 브래킷을 탈출하지만하지 않는 한.

에서 awk스크립트 나는 필드 구분자로 ‘(‘사용하려고이 같은 이중 백 슬래시와 브래킷을 탈출하지만하지 않는 한. :

BEGIN {FS=" \\("}

작동하지 않습니다.

내가 사용 FS=" \("하면 얻을

awk: prog:2: warning: escape sequence `\(' treated as plain `('
awk: prog:2: fatal: :, [., or [=: / (/

출력 및 대괄호를 전혀 벗어나지 않으면

awk: prog:2: fatal: :, [., or [=: / (/ 메시지.

이 행동을 설명해 주시겠습니까?



답변

사용 ␣(필드로 분리 (공간 + 괄호) awk사용 "␣\\\(":

$ echo "a (b (c" | awk -F " \\\(" '{ print $1; print $2; print $3 }'
a
b
c

또는 작은 따옴표와 두 개의 백 슬래시를 사용하십시오.

$ echo "a (b (c" | awk -F ' \\(' '{ print $1; print $2; print $3 }'
a
b
c

그 이유는 것입니다 ␣((하나의 괄호 최고의 공간이) 잘못된 정규 표현식입니다. 왼쪽 괄호는 닫히지 않은 그룹을 엽니 다. 이것이 탈출 해야하는 이유입니다.

선행 공백이 없는( 단일 괄호 가 작동하는 이유 는 단일 문자 인 경우 정규 표현식으로 처리되지 않기 때문입니다.FS


답변

사용 – 유사한 문제에 대한 해결책을 찾을 때 I이 스레드 발견 OR (AWK 대한 필드 분리한다. 이것은 대답하지 않았지만 내 해결책을 알려 드리겠습니다.

␣(awk에서 파일을 분리하기 위해 단일 단위로 조합하려면 다음을 수행하십시오 awk -F '( \\()' ....

$ echo "This (maybe) is a test()" | awk -F '( \\()' '{print $1 "\n" $2 "\n" $3 "\n" $4 "\n" $5 "\n" $6 "\n" $7; print "Number of Fields: " NF}'
This
maybe) is a test()





Number of Fields: 2

비슷한 문제에 대한 해결책을 찾고 있다면 OR (을 수행하십시오 awk -F '( |\\()' ....

$ echo "This (maybe) is a test()" | awk -F '( |\\()' '{print $1 "\n" $2 "\n" $3 "\n" $4 "\n" $5 "\n" $6 "\n" $7; print "Number of Fields: " NF}'
This

maybe)
is
a
test
)
Number of Fields: 7