我的shell脚本执行以下操作:
grep '<record' /data/error/usage_20160422_165920.lerr.xml|sed -e 's/'//g'|cut -d ';' -f1,40,43,46
结果将如下所示
<record record_no = "1" error_code="101">;RevShare-2.txt;TWN;1
我想删除xml标记<record record_no = "1" error_code=
,结果应该看起来像101;RevShare-2.txt;TWN;1
;
记录号码#是动态的。
编辑:我已添加cut -d '=' -f3|tr -d '",>'
来实现此目的。这有效,但处理包含20,000条记录的文件需要3秒钟。我每天都有500个文件。有没有更好的方法来加快这个过程?
编辑:这是记录的样子。
<record record_no = "1" error_code="101">'';'25467';'';'';'FIRSTNAME';'Manikin';'1234001';'12484254823';'';'';'';'103';'12484254815';'XXXXX9680';'OFX';'0';'1028000002130745';'20160422';'0000';'25467';'20160422';'Y';'';'';'6';'2';'1';'0';'';'263';'99';'N';'';'Idverifyprod@50';'136';'7, 74, 77, 80, 105, 136, 153';'0';'';'501';'RevShare-2.txt';'20160422165920';'000009680';'TWN';'1449587762538';'1';'1';'0';'';'Verifier'
</record>
答案 0 :(得分:1)
$ awk '
BEGIN { FS=OFS=";" }
/<record/ {
gsub(/'/,"")
gsub(/.*="|">/,"",$1)
print $1, $40, $43, $46
}
' /data/error/usage_20160422_165920.lerr.xml
101;RevShare-2.txt;TWN;1
答案 1 :(得分:0)
当其他字段没有像error_code
这样的字符串时,您可以执行类似
| sed 's/.* error_code="[^"]*">/\1/'
你能结合不同的命令吗?像
这样的东西cut -d ';' -f1,40,43,46 /data/error/usage_20160422_165920.lerr.xml|
sed -n '/<record/p;s/'//g;s/.* error_code="[^"]*">/\1/'