搜索字符串并打印字符串及其标题

搜索字符串并打印字符串及其标题

我需要搜索一个字符串(此处为数字),并使用 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方法:

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)- 如果搜索号码在一行号码内匹配

相关内容