문자열의 첫 번째 항목만 일치시킨 다음 N 줄의 awk를 추가합니다.

문자열의 첫 번째 항목만 일치시킨 다음 N 줄의 awk를 추가합니다.

안녕하세요, 문자열의 첫 번째 발생을 일치시킨 후 N 줄을 추출하고 awk를 사용하여 다음 N 줄을 인쇄하고 싶습니다. 이 문자열은 제가 작업 중인 파일에서 여러 번 반복됩니다. 나는 다음 명령을 사용해 보았습니다.

'c&&c--;/XCHT/{c=10}'

그러면 일치하는 모든 이벤트 + 10줄이 인쇄됩니다. 많은 검색 끝에 이 명령의 다양한 버전을 보았지만 모두 아래와 같이 거의 동일한 결과를 생성합니다. 나는 주위를 둘러보고 깨달았다. 결과를 얻기 위해 이 명령을 수정하는 방법에 대한 몇 가지 팁을 알고 싶습니다.

제가 달성하고 싶은 경기 결과는 다음과 같습니다

| XCHT            |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 生姜shengjiang  | 9  |
| 刺五加ciwujia   | 9  |
| 大枣dazao       | 6  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |

파일의 일부는 다음과 같습니다.

## XCHT
| XCHT            |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 生姜shengjiang  | 9  |
| 刺五加ciwujia   | 9  |
| 大枣dazao       | 6  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |


## XCHT+CM

|                 |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 干姜ganjiang    | 9  |
| 五味子wuweizi   | 9  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |

## XCHT+TM


| XCHT+TM                 |    |
|-----------------        |----|
| 柴胡chaihu              | 24 |
| 黄芩huangqin            | 9  |
| 法天花粉tianhuafen      | 12 |
| 生姜shengjiang          | 9  |
| 刺五加ciwujia           | 12 |
| 大枣dazao               | 6  |
| 炙甘草zhigancao         | 9  |
|                         |    |
|                         |    |
 

| XCHT-HQin+FL    |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄茯苓fuling    | 12 |
| 法半夏banxia    | 12 |
| 生姜shengjiang  | 9  |
| 刺五加ciwujia   | 9  |
| 大枣dazao       | 6  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |
## XCHT-DZ+ML

| XCHT-DZ+ML      |     |
|-----------------|-----|
| 柴胡chaihu      | 12  |
| 黄芩huangqin    | 4.5 |
| 法半夏banxia    | 6   |
| 生姜shengjiang  | 4.5 |
| 刺五加ciwujia   | 4.5 |
| 牡蛎 muli       | 6   |
| 炙甘草zhigancao | 4.5 |
|                 |     |
|                 |     |

'c&&c--;/XCHT/{c=10}'파일에 대한 명령 결과

| XCHT            |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 生姜shengjiang  | 9  |
| 刺五加ciwujia   | 9  |
| 大枣dazao       | 6  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |

| XCHT            |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 干姜ganjiang    | 9  |
| 五味子wuweizi   | 9  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |



| XCHT+TM                 |    |
|-----------------        |----|
| 柴胡chaihu              | 24 |
| 黄芩huangqin            | 9  |
| 法天花粉tianhuafen      | 12 |
| 生姜shengjiang          | 9  |
| 刺五加ciwujia           | 12 |
| 大枣dazao               | 6  |
| 炙甘草zhigancao         | 9  |
|                         |    |
|                         |    |

| XCHT-DZ+ML      |     |
|-----------------|-----|
| 柴胡chaihu      | 12  |
| 黄芩huangqin    | 4.5 |
| 法半夏banxia    | 6   |
| 生姜shengjiang  | 4.5 |
| 刺五加ciwujia   | 4.5 |
| 牡蛎 muli       | 6   |
| 炙甘草zhigancao | 4.5 |
|                 |     |
|                 |     |

| Xiao Chaihi Tang -HQ+BS |    |
|-------------------------|----|
| 柴胡chaihu              | 24 |
| 白芍baishao             | 9  |
| 法半夏banxia            | 12 |
| 生姜shengjiang          | 9  |
| 刺五加ciwujia           | 9  |
| 大枣dazao               | 6  |
| 炙甘草zhigancao         | 9

테이블을 웹 페이지에 복사하기 때문에 테이블이 약간 불안정합니다. 제안된 도움을 주시면 대단히 감사하겠습니다.

답변1

이를 처리하는 한 가지 방법은 c0이 반환될 때 종료하는 것입니다.

c { print; if (--c == 0) exit }; /XCHT/{c=10}

아니면 좀 더 간략하게 말하자면,

c; c && !--c { exit }; /XCHT/{c=10}

GNU는 grep비슷한 일을 할 수 있습니다:

grep -m1 -A10 XCHT

(그러나 이는 "XCHT"와 일치하는 첫 번째 줄도 표시합니다).

답변2

정확히 10줄 길이의 빈 줄로 구분된 레코드를 인쇄하려는 것 같습니다. awk를 사용하면 행 수를 세고 레코드가 몇 행이라고 생각하는지 하드코딩할 필요가 없습니다. RS길이에 관계없이 그러한 레코드를 처리하려면 빈 문자열로 설정하기만 하면 됩니다.

다음으로 시작하는 줄이 ##입력에 실제로 존재하지 않는 경우 필요한 것은 다음과 같습니다.

awk -v RS= '/XCHT/{print; exit}' file

그렇지 않고 행이 존재하면 sub()를 사용하여 삭제할 수 있습니다.

$ awk -v RS= '{sub(/##[^\n]*(\n|$)/,"")} /XCHT/{print; exit}' file
| XCHT            |    |
|-----------------|----|
| 柴胡chaihu      | 24 |
| 黄芩huangqin    | 9  |
| 法半夏banxia    | 12 |
| 生姜shengjiang  | 9  |
| 刺五加ciwujia   | 9  |
| 大枣dazao       | 6  |
| 炙甘草zhigancao | 9  |
|                 |    |
|                 |    |

관련 정보