2番目のファイルにリストされているジョブリストのジョブ定義を検索します。

2番目のファイルにリストされているジョブリストのジョブ定義を検索します。

250,000のジョブの詳細を含むファイルがあります。このソースファイルでは、すべてのジョブに異なるパラメータがあるため、ジョブごとに行数が異なる場合があります。唯一のパターンは、各ジョブ定義がブレークラインで始まり、insert:ブレークラインで終わることです。

insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA2   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA4   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

insert: PPC_SA6   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

目標位置:

PPC_SA1
PPC_SA5
PPC_SA3

上記のリストにあるこれらの操作のエントリを別のファイルに抽出する必要があります。

insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

insert: PPC_SA3   job_type: CMD
box: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

答え1

タスクはすべて空行で終わるため、perl「段落モード」で使用できます(つまり、空行を\n\nレコード区切り文字と見なし、「段落」を「行」として効果的に処理することを意味します)。

$ perl -00lne 'print if /insert:\s+PPC_SA[153]\s/' file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

段落モードを有効にする-00と、スクリプトは一致するすべてのレコードを印刷し、その後にまたはinsert:\s+PPC_SAいずれかと別の空白文字が続きます。153

もちろん、ターゲットIDが多いと実用的ではないので、次のように一般化することもできます。

cat file | 
    perl -00lne 'BEGIN{ $k{$_}++ for @ARGV; @ARGV=()} /insert:\s+(\S+)/; print if $k{$1}' PPC_SA1 PPC_SA5 PPC_SA3

または を使用して、宛先 ID を 1 行に 1 つずつawkファイル (この例では呼び出される) に保存し、以下を実行できます。target_ids

$ awk '(NR==FNR){a[$1]++; next}
       { 
         if(/insert:/ && $2 in a){want=1} 
         if(want){print}
         if(/^\s*$/){want=0}
        }' target_ids file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

答え2

これはどうですか?

awk 'NR==FNR{ trgtJbs[$0]; next } ($2 in trgtJbs)' targetJobs RS='' allJobs

まず、すべてのtargetJobsを読みます。targetJobsファイル内にあるので、それぞれのタスクについて言及したので、allJobsファイルは空行で区切られているので、次のように設定します。エココードS2番目のファイルの区切り文字を空白行に設定し、各ワークブロックの2番目のフィールドがあることを確認します。trgtJbs私たちが使用する配列は出力されます。

出力に空白行を保持するには、次のようにします。

awk 'NR==FNR{ trgtJbs[$0]; next }
    ($2 in trgtJbs){ print sep $0; sep=ORS }' targetJobs RS='' allJobs

答え3

ショートモードでは、awk目的のレコードを選択できます。

awk -v RS= -v FS='\n' -v ORS='\n\n' '$1~/PPC_SA(1|3|5)[[:space:]]+/' file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

答え4

sed -n '/^insert.* PPC_SA[153]/,/^$/p' filename



output

insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

関連情報