GNU bash,版本 3.2.25(1)-release (x86_64-redhat-linux-gnu)。
我有一个文件目录(每天多个文件),我想从中提取某些数据。
每个文件都有一系列对于文件来说是常量的值(AuditID、ProcessID 等),并且每个文件都会出现一次。然后每个文件都有许多以“STEP=XFR”开头的行
目标:创建包含上述常量以及以“STEP=XFR”开头的每一行的单行输出。
问题:当我运行 FOR LOOP 来处理文件时,每个文件而不是每行只回显常量一次。
我已经搜索和搜索(并且对 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 开始=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]
期望的结果:(每次回显 STEP=XFR 时,region、log_date、AuditID 和 ProcessID 都会重复。)
- 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]