에서 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