文字列(ここでは数字)を検索し、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)
- 検索された番号が連続した番号内で一致する場合