GNU bash、バージョン 3.2.25(1) リリース (x86_64-redhat-linux-gnu)。
特定のデータを抽出したいファイルのディレクトリ (1 日に複数のファイル) があります。
各ファイルには、ファイルに対して一定の一連の値 (AuditID、ProcessID など) があり、ファイルごとに 1 回表示されます。次に、各ファイルには「STEP=XFR」で始まる多くの行があります
目標: 上記の定数と、「STEP=XFR」で始まる各行を含む 1 行の出力を作成します。
問題: ファイルを処理するために FOR LOOP を実行すると、定数はすべての行ではなく、ファイルごとに 1 回だけエコーされます。
私は検索して検索しました(そしてbashには非常に慣れていません)が、答えが見つかりませんでした。
sed を使用して STEP=XFR 行を解析することにかなり近づきましたが、何とか置換内に定数を含めることができましたが、ほとんどの sed ステートメントをポーチしてしまい、本当に理解できなかったので、何かを選択していますより明確に。
現在、解析されていない STEP=XFR 行を単純に出力すると同時に、それらの前に定数を連結しようとしています。
これが私が持っているものです...そしてどうもありがとう。
region=$1
log_date=$2
cur_date=`date +%Y%m%d`
if [[ -z $1 ]]; then
region=$Region
fi
if [[ -z $2 ]]; then
log_date=$cur_date
fi
#define location of source file
file_loc='/bl/project/'$region'/netezza/log'
#declare directory/file mask
files=$file_loc'/LOG_nz_flow_execute_svckmnz_elt_'$log_date'*.log'
#define file name and location to put results
xfrmon_results="/home/userid/quality/xfrmon_"$region"_"$log_date".dat"
#loop through files...
for f in $files
do
#grep for values
d='|'
AuditID=$(grep "^Audit ID" $f | cut -d':' -f2 | head -n 1)
ProcessID=$(grep "^Process ID" $f | cut -d':' -f2 | head -n 1)
xfrmeta=$(grep "STEP=XFR " $f)
lineout="$region$d$log_date$d$AuditID$d$ProcessID$d$xfrmeta"
echo "$lineout"
done
結果:
- prd|20130922| 8900983| 7718|
- prd|20130922| 8900984| 12248|STEP=XFR 開始=2013-09-22 03:30:08.493374 終了=2013-09-22 03:30:08.988577 期間(秒)=1 書き込み=[1]
- STEP=XFR 開始=2013-09-22 05:09:54.014299 終了=2013-09-22 05:09:56.610330 期間(秒)=2 書き込み=[1]
- STEP=XFR 開始=2013-09-22 05:09:51.886866 終了=2013-09-22 05:09:52.539379 期間(秒)=1 書き込み=[1]
- STEP=XFR 開始=2013-09-22 05:09:51.831049 終了=2013-09-22 05:09:52.319850 期間(秒)=1 書き込み=[1]
- prd|20130922| 8900985| 11316|
- prd|20130922| 8900986| 989|
- prd|20130922| 8900987| 1977年|
- prd|20130922| 8900988| 25269|STEP=XFR 開始=2013-09-22 05:45:07.923100 終了=2013-09-22 05:45:08.299312 期間 (秒)=1 書き込み=[1]
- STEP=XFR 開始=2013-09-22 06:11:43.464400 終了=2013-09-22 06:11:47.741536 期間(秒)=4 書き込み=[1]
- prd|20130922| 8900989| 8962|STEP=XFR 開始=2013-09-22 05:50:10.625196 終了=2013-09-22 05:51:49.113589 期間(秒)=99 書き込み=[62617537]
- STEP=XFR 開始=2013-09-22 05:51:49.195200 終了=2013-09-22 05:51:51.322727 期間(秒)=2 書き込み=[0]
- STEP=XFR Start=2013-09-22 05:51:51.558343 End=2013-09-22 05:52:12.234552 Duration(secs)=21 Written=[62617537]
- prd|20130922| 8900990| 9061|STEP=XFR 開始=2013-09-22 05:51:17.891031 終了=2013-09-22 05:51:18.923637 期間(秒)=2 書き込み=[82]
望ましい結果: (リージョン、log_date、AuditID、および ProcessID は、STEP=XFR がエコーされるたびに繰り返されます。)
- prd|20130922| 8900983| 7718|
- prd|20130922| 8900984| 12248|STEP=XFR 開始=2013-09-22 03:30:08.493374 終了=2013-09-22 03:30:08.988577 期間(秒)=1 書き込み=[1]
- prd|20130922| 8900984| 12248|STEP=XFR 開始=2013-09-22 05:09:54.014299 終了=2013-09-22 05:09:56.610330 期間 (秒)=2 書き込み=[1]
- prd|20130922| 8900984| 12248|STEP=XFR 開始=2013-09-22 05:09:51.886866 終了=2013-09-22 05:09:52.539379 期間 (秒)=1 書き込み=[1]
- prd|20130922| 8900984| 12248|STEP=XFR 開始=2013-09-22 05:09:51.831049 終了=2013-09-22 05:09:52.319850 期間 (秒)=1 書き込み=[1]
- prd|20130922| 8900985| 11316|
- prd|20130922| 8900986| 989|
- prd|20130922| 8900987| 1977年|
- prd|20130922| 8900988| 25269|STEP=XFR 開始=2013-09-22 05:45:07.923100 終了=2013-09-22 05:45:08.299312 期間 (秒)=1 書き込み=[1]
- prd|20130922| 8900988| 25269|STEP=XFR 開始=2013-09-22 06:11:43.464400 終了=2013-09-22 06:11:47.741536 期間 (秒)=4 書き込み=[1]
- prd|20130922| 8900989| 8962|STEP=XFR 開始=2013-09-22 05:50:10.625196 終了=2013-09-22 05:51:49.113589 期間(秒)=99 書き込み=[62617537]
- prd|20130922| 8900989| 8962|STEP=XFR 開始=2013-09-22 05:51:49.195200 終了=2013-09-22 05:51:51.322727 期間 (秒)=2 書き込み=[0]
- prd|20130922| 8900989| 8962|STEP=XFR 開始=2013-09-22 05:51:51.558343 終了=2013-09-22 05:52:12.234552 期間(秒)=21 書き込み=[62617537]
- prd|20130922| 8900990| 9061|STEP=XFR 開始=2013-09-22 05:51:17.891031 終了=2013-09-22 05:51:18.923637 期間(秒)=2 書き込み=[82]