최종 보고서를 위해 제거해야 하는 4.txt
파일의 전체 경로와 추가 데이터()가 포함된 파일이 있습니다 .*.cfg
5.csv
예를 들어/source/EDDG/env1/dom1/proj/config/test.cfg
<ListVariable name="selected_lookups">
<CompoundVariableValue>
<StringVariableValue name="lookup_name" value="CUSTOMER_1"/>
<StringVariableValue name="business_name" value="DEVCUSTOMER"/>
<StringVariableValue name="sample_data_path"value="/dev/.dat"/>
</CompoundVariableValue>
<CompoundVariableValue>
<StringVariableValue name="lookup_name" value="CODE_1"/>
<StringVariableValue name="business_name"value="CONCUSTOMER"/>
</CompoundVariableValue>
</ListVariable>
(이 순서는 약 238회 반복되며, 와 사이의 데이터는 <ListVariable * >
다릅니다 </ListVariable>
.
이제 이 파일에서 4개의 값을 가져와서 csv 파일로 파이프해야 합니다. 예:
DOM, PROJ, CFG, LOOKUP NAME VALUE(s) (thr can be many per cfgfile)
source, EDGE, test.cfg, CUSTOMER_1
, CONCUSTOMER (second lookup name value)
... repeat for all cfg files in 4.txt
이 데이터를 얻으려면 처음 3개 열에는 잘 작동하지만 네 번째 열에는 잘 작동하지 않는 다음 루프가 있습니다.
for COL_VAL in `cat 4.txt | grep '/source/EDDG*'` ;
do
DOM=`echo "${COL_VAL}" | awk -F'/' '{ print $7 }'`
PROJ=`echo "${COL_VAL}" | awk -F'/' '{ print $8 }'`
CGF=`echo "${COL_VAL}" | awk -F'/' '{ print $10 }'`
LKP=`echo "${COL_VAL}" | grep 'name="lookup_name" value="' | awk -F'value="' '{ print $2 }' | awk -F'_1' '{ print $1 }'`
echo "${DOM},${PROJ},${CFG},${LKP}"
done < ${TMPDIR}/4.txt > ${TMPDIR}/5.csv
그래서 다음과 같은 중첩 루프를 시도했습니다.
for COL_VAL in `cat 4.txt | grep '/source/EDDG*'` ;
do
DOMN=`echo ${COL_VAL} | awk -F'/' '{ print $7 }'`
PROJ=`echo ${COL_VAL} | awk -F'/' '{ print $8 }'`
APFG=`echo ${COL_VAL} | awk -F'/' '{ print $10 }'`
for LOOK_UP in `cat 4.txt | grep 'name="lookup_name" value="'` ;
do
ULKP=`echo "${LOOK_UP}" | awk -F'value="' '{ print $2 }' | awk -F'_1' '{ print $1 }'`
done
echo "${DOMN},${PROJ},${APFG},${ULKP}"
done < ${TMPDIR}/4.txt > ${TMPDIR}/5.csv
그러면 네 번째 열이 채워지지만 동일한 데이터로 채워집니다. 그리고 이상한 점은 네 번째 열의 데이터가 4.txt에서 마지막으로 조회한 절대 이름의 값인 "'name = "lookup_name" value = XYZ'"라는 것입니다.
예를 들어
DOM, PROJ, CFG, LOOKUP NAME VALUE(s)
source, EDGE, test.cfg, XYZ
, , , XYZ
... repeat for all cfg files in 4.txt
답변1
이건 어때. 단일 실행은 awk
원래 스크립트에 비해 상당히 빠를 것입니다.
$ awk -F/ 'BEGIN{print "DOM, PROJ, CFG, LOOKUP NAME VALUE(s)"}/source\/EDDG/{a=$2", "$3", "substr($8,0,length($8)-2)", "}/lookup_name/{gsub(/^.*value="/,"");gsub(/".*/,"");print a$0}' 4.txt
DOM, PROJ, CFG, LOOKUP NAME VALUE(s)
source, EDDG, test.cfg, CUSTOMER_1
source, EDDG, test.cfg, CODE_1
$
또는 더 예쁜 형식을 사용하면 다음과 같습니다.
$ awk -F/ 'BEGIN {
print "DOM, PROJ, CFG, LOOKUP NAME VALUE(s)"
}
/source\/EDDG/ {
a=$2", "$3", "substr($8,0,length($8)-2)", "}
/lookup_name/ {
gsub(/^.*value="/,"")
gsub(/".*/,"")
print a$0
}' 4.txt
DOM, PROJ, CFG, LOOKUP NAME VALUE(s)
source, EDDG, test.cfg, CUSTOMER_1
source, EDDG, test.cfg, CODE_1
$