awk 경계는 패턴의 시작입니다

awk 경계는 패턴의 시작입니다


1다음과 같이 실패하는 try 패턴의 시작 범위 또는 경계를 설정하기 위해 awk를 얻는 방법

$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'
a
b
c
end
e
f
g

패턴이 작동하기 때문에 이는 모든 사람에게 적용됩니다.

$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '/b/,/end/ {print $0}'
b
c
end

하지만 다시 질문으로 돌아가서 패턴이 시작되는 범위 또는 경계를 얻는 방법은 무엇입니까?

답변1

2행과 4행 사이에 선을 추가하려면 다음을 수행하세요.

awk 'NR ==2, NR == 4' file

목적이 과 regex1사이의 줄을 얻는 regex2것이라면 NR 표현식을 정규식으로 바꿀 수 있습니다.

awk '/regex1/, /regex2/' file

더 자세한 형태는 다음과 같습니다.

awk '$0 ~ /regex1/, $0 ~ /regex2/ { print $0}' file

~처럼다른 답변제안전체 줄 문자열 일치위의 표현은 이 명령에서 나온 것입니다. 이 답변은 읽기에 설득력이 있습니다.

awk '$0 == "b", $0 == "end" { print $0}' file

awk '/b/, /end/' file당신이 얻고 싶은 것을 위해.

이제 NR 표현식과 정규 표현식을 유지하는 두 가지를 결합할 수 있습니다.

awk '/b/, NR == 4' file

또는

awk 'NR == 2, /end/' file

echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'awk이 명령에서는 라인 1(레코드 수가 1일 때, 즉 NR == 1)에서 시작해야 한다고 알려야 합니다 .

이것은:

echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk 'NR == 1,/end/ {print $0}'

이것은 작동합니다.

답변2

그건:

awk 'NR==1, /end/'

파일의 시작 부분(첫 번째 줄부터 시작)부터 패턴이 포함된 줄까지 인쇄하는 것을 의미합니다.end. 알아채다{print $0}(또는 약어 print)는 여기서 선택 사항입니다.

주문에 문제가 있나요?

with awk '1,/end/{ print $0 }', 실제로 이 명령은 awk '1 || /end/ {print $0}'두 부분으로 구성됩니다.

  1. 항상 입력 행의 항상 참인 조건을 출력합니다.
  2. /end/패턴과 일치하는 줄만 인쇄하는 정규식end이보다 우선순위가 높은 조건이 있는 경우 이는 중복됩니다. 명령은 실제로 awk 1( { print $0 }위에서 언급한 대로 선택 사항)로 단축될 수 있습니다.

...모든 라인이 출력됩니다.


시작점이 항상 첫 번째 줄이라면 이렇게 작성하고, 나타나면 바로 종료할 수도 있습니다.end파일의 나머지 부분을 불필요하게 읽지 않도록 패턴을 찾으십시오.

awk '/end/{ print; exit }1'   ##or
awk '{ print } /end/{ exit }' ##or
awk '1; /end/{ exit }'

그리고 인쇄에서 패턴 자체를 제외합니다.

awk '/end/{ exit } { print }' ##or
awk '/end/{ exit }1'

동일한 작업을 수행하되 다음과 같은 패턴을 일치시키세요.정규식과 전체 줄 문자열 일치를 사용하는 대신 다음을 수행할 수 있습니다.

awk 'NR==1, $0=="end"'

바라보다패턴과 일치하는 텍스트를 찾는 방법은 무엇입니까?추가 매칭 옵션을 확인하세요.

관련 정보