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


-1

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

这确实并不难。你尝试了什么?
跳跳虎

我在将源文件“ out”和所需的编号放入文件列表“ for i in cat list; do if [[ grep -w $i out]];然后grep -w $ i out; else echo $ i”:not found“; fi; done 之后尝试了此命令”,但我没有标题。
Fady.Fouad

Answers:


0

如果标头由这些#####行标识,并且要搜索的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

2

您可以尝试如下操作:

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

其中“ 2516”是您要搜索的号码。

obs:我假设所有标签都以“:”结尾。


我可以将要搜索的数字放在文件中(不仅是2516)吗?
Fady.Fouad

0

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


我可以将要搜索的数字放在文件中(不仅是2515)吗?
Fady.Fouad

@ Fady.Fouad,您要按多个数字进行搜索吗?
RomanPerekhrest

是的,文件中有多个数字
-Fady.Fouad,

@ Fady.Fouad,以及它们如何在文件中以空格或换行符分隔?
RomanPerekhrest

通过文件中的新行。
Fady.Fouad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.