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