문자열을 검색하고 문자열과 제목을 인쇄합니다.

문자열을 검색하고 문자열과 제목을 인쇄합니다.

문자열(여기서는 숫자)을 검색하고 grep이나 awk 등을 사용하여 제목이나 제목을 인쇄해야 합니다.

다음 예를 확인하세요.

입력 파일 내용:

#####
Production_Broad:
#####
678
544
#####
IGHTY_BBBT:
#####
1666
2515
2516
2517
2518
#####
Jaguar:
#####
280
#####
Loyalty:
#####
5179
#####
MC_Addr:
#####
544
577890
#####
erce_Ban_1:
#####
7455
5656

숫자 "2515"를 검색하려고 하는데 다음과 같은 결과가 나타납니다.

IGHTY_BBBT:
2515

"5179"를 검색하면 다음과 같이 출력됩니다.

Loyalty:
5179

답변1

다음과 같이 시도해 볼 수 있습니다.

awk '{if(match($0,":")) header=$0; if($0 == 2516) printf("%s\n%s\n",header,$0)}' input_file.txt

여기서 "2516"은 검색하려는 번호입니다.

obs: 모든 태그는 ":"으로 끝나는 것으로 가정합니다.

답변2

헤더가 다음 줄로 식별되고 #####검색할 ID 목록이 파일에 있는 경우 ids.txt(한 줄에 하나씩) 다음을 수행할 수 있습니다.

awk '
  !ids_processed{ids[$0]; next}
  $0 == "#####" {getline header; getline; next}
  $0 in ids     {print header ORS $0}' ids.txt ids_processed=1 input.txt

예를 들어 ids.txt다음이 포함된 경우

2515
544
577890

귀하의 샘플에서는 다음이 제공됩니다.

Production_Broad:
544
IGHTY_BBBT:
2515
MC_Addr:
544
MC_Addr:
577890

답변3

방법:

awk -v RS="#####" -v num=2515 '$0~/[0-9a-zA-Z_]+:/{ 
     getline nl; if (nl~num){sub("\n", "", $0); printf("%s%d\n",$0,num)}}' file

산출:

IGHTY_BBBT:
2515

RS="#####"- #####레코드 구분자로 처리됩니다.

-v num=2515- 검색번호를 포함하는 변수

$0~/[0-9a-zA-Z_]+:/- 캡처머리글철사

getline nl- 숫자가 포함된 다음 레코드 가져오기

if (nl~num)- 검색된 번호가 연속된 번호 내에서 일치하는 경우

관련 정보