文字列を検索し、文字列とタイトルを印刷します。

文字列を検索し、文字列とタイトルを印刷します。

文字列(ここでは数字)を検索し、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(1行に1つ)、次のことができます。

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)- 検索された番号が連続した番号内で一致する場合

関連情報