![문자열을 검색하고 문자열과 제목을 인쇄합니다.](https://linux55.com/image/111545/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EA%B3%A0%20%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC%20%EC%A0%9C%EB%AA%A9%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
문자열(여기서는 숫자)을 검색하고 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)
- 검색된 번호가 연속된 번호 내에서 일치하는 경우