入力する
<acc_details acct_no="00000" acct_nm="John"/>
<acc_details acct_no="00001" acct_address="109 BIRHN WAY " acct_nm="BARNS WY"/>
<acc_details acct_no="00002" acct_nm="BILL BAR" phne_nm="123456"/>
期待される出力
acct_no,acct_address,acct_nm,phne_nm
00000,,John,
00001,109 BIRHN WAY,BARNS WY,
00002,,BILL BAR,123456
答え1
xml
ルートタグを追加してファイルを回復します。
<accounts>
<acc_details acct_no="00000" acct_nm="John"/>
<acc_details acct_no="00001" acct_address="109 BIRHN WAY " acct_nm="BARNS WY"/>
<acc_details acct_no="00002" acct_nm="BILL BAR" phne_nm="123456"/>
</accounts>
それからxml
パーサーを使って例えばxmlstarlet
:
{
echo "acct_no,acct_address,acct_nm,phne_nm"
xmlstarlet sel -t \
-m '//acc_details' \
-v "concat(@acct_no,',',@acct_address,',',@acct_nm,',',@phne_nm)" -n \
input_file
}
出力:
acct_no,acct_address,acct_nm,phne_nm
00000,,John,
00001,109 BIRHN WAY ,BARNS WY,
00002,,BILL BAR,123456