最終レポートのために削除する必要がある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列にはうまく機能しますが、4番目の列にはうまく機能しない次のループがあります。
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番目の列が埋められますが、同じデータで埋められます。そして、奇妙なことは、4番目の列のデータが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
$