GNU bash, 버전 3.2.25 (1) -release (x86_64-redhat-linux-gnu).Bash 사용 - 여러 결과가 반환되는 for 루프에서 반복 상수
특정 데이터를 추출 할 파일 디렉터리 (하루에 여러 파일)가 있습니다.
각 파일에는 파일 (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 | 20,130,922 | 8900983 | 7718 |
- prd | 20130922 | 8900984 | 12248 | STEP = XFR 시작 = 2013-09-22 03 : 30 : 08.493374 끝 = 2013-09-22 03 : 30 : 08.988577 지속 시간 (초) = 1 기록 = [1]
- 단계 = XFR 시작 = 2013-09-22 05 : 09 : 54.014299 끝 = 2013-09-22 05 : 09 : 56.610330 지속 시간 (초) = 2 글자 = [1]
- 단계 = XFR 시작 = 2013-09-22 05:09 : 51.886866 End = 2013-09-22 05 : 09 : 52.539379 지속 시간 (초) = 1 Written = [1]
- 단계 = XFR 시작 = 2013-09-22 05 : 09 : 51.831049 끝 = 2013-09- 22 05 : 09 : 52.319850 지속 시간 (초) = 1 Written = [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 End = 2013-09-22 06 : 11 : 47.741536 지속 시간 (초) = 4 Written = [1]
- prd | 20130922 | 8900989 | 8962 | STEP = XFR 시작 = 2013-09-22 05 : 50 : 10.625196 끝 = 2013-09-22 05 : 51 : 49.113589 지속 시간 (초) = 99 Writed = [62617537]
- STEP = XFR 시작 = 2013-09-22 05:51:49.195200 End = 2013-09-22 05 : 51 : 51.322727 지속 시간 (초) = 2 Written = [0]
- 단계 = XFR 시작 = 2013-09-22 05 : 51 : 51.558343 끝 = 2013-09-22 05 : 52 : 12.234552 지속 시간 (초) = 21 글자 = [62617537]
- prd | 20130922 | 8900990 | 9061 | STEP = XFR 시작 2013년 9월 22일 = 05 : 51 : 17.891031 최종 2013년 9월 22일 = 05 : 51 : 18.923637 시간 (초) = 2 원하는 글 = [82]
결과 : (지역, log_date는 &은 ProcessID 자신 XFR은 echo'd됩니다 = 각 시간 단계 반복 AuditID.)
- PRD | 20,130,922 | 8900983 | 7718 |
- prd | 20130922 | 8900984 | 12248 | 단계 = XFR 시작 = 2013-09-22 03 : 30 : 08.493374 끝 = 2013-09-22 03 : 30 : 08.988577 지속 시간 (초) = 1 글쓰기 = [1]
- prd | 20130922 | 8900984 | 12248 | 단계 = XFR 시작 = 2013-09-22 05 : 09 : 54.014299 끝 = 2013-09-22 05 : 09 : 56.610330 지속 시간 (초) = 2 작성된 = [1]
- prd | 20130922 | 8900984 | 12248 | 단계 = XFR 시작 = 2013-09-22 05 : 09 : 51.886866 끝 = 2013-09-22 05 : 09 : 52.539379 지속 시간 (초) = 1 Written = [1]
- prd | 20130922 | 8900984 | 12248 | 단계 = 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 End = 2013-09-22 05 : 45 : 08.299312 지속 시간 (초) = 1 Written = [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년 9월 22일 05 : 50 : 10.625196 끝 = 2013년 9월 22일 05 : 51 : 49.113589 기간 (초) = 99 글은 = [62617537]
- PRD | 20,130,922 | 8900989 | 8962 | 단계 = 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 Writed = [62617537]
- prd | 20130922 | 8900990 | 9061 | 단계 = XFR 시작 = 2013-09-22 05 : 51 : 17.891031 끝 = 2013-09-22 05:51:18.923,637 시간 (초)이 하나 귀하의
for
루프를 변경하려면 2 글 = [82]