같은 열에 있는 두 패턴 사이의 선을 추출하는 방법은 무엇입니까?

같은 열에 있는 두 패턴 사이의 선을 추출하는 방법은 무엇입니까?

나는 사이의 선을 추출하고 싶다특허 1도착하다특허 2첫 번째 열에만 의존하는 패턴 라인을 포함하면 패턴은 첫 번째 열에 한 번만 존재하지만 다른 열에는 여러 번 존재할 수 있습니다. 내 입력 파일의 예

0.000 0.8928 0.893
0.500 PAT1 0.902
PAT1 0.8974 0.9116
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1  0.9285
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2  0.8936 0.9128
4.500 0.8912 0.9009
5.000 0.8889 PAT2
5.500 0.887 0.8718
6.000 PAT2 0.8565
6.500 0.8858 0.8414
7.000 0.8871 0.8271

내 출력은 다음과 같아야합니다

PAT1 0.8974 0.9116
    1.500 0.8986 0.9199
    2.000 0.8989 0.9258
    2.500 PAT1  0.9285
    3.000 0.8978 0.9272
    3.500 0.8959 0.9219
    PAT2  0.8936 0.9128

내 궤도는 다음과 같이 awk를 사용하고 있습니다

awk '/PAT1/,/PAT2/' input

하지만 이것은 열과 관련이 없습니다.

답변1

다음과 같이 awk 코드를 변경하십시오.

awk '$1 ~ /PAT1/,$1 ~ /PAT2/' input

이렇게 하면 전체 행 대신 열 1을 일치시킬 수 있습니다.

답변2

그리고 sed:

$ sed -n '/^PAT1/,/^PAT2/p' input
PAT1 0.8974 0.9116 
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1  0.9285 
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2  0.8936 0.9128

스크립트 는 범위 ( ) 내에 있는 입력의 행만 sed인쇄합니다 (각 행의 기본 출력은 꺼져 있습니다 ).p/^PAT1//^PAT2/-n

Anchor( ^)는 줄 시작 부분의 문자열과만 일치하면 됩니다.

관련 정보