我的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我希望删除<record record_no = "1" error_code=标记,结果应该类似于101;RevShare-2.txt;TWN;1;
记录nos#是动态的。
编辑:我添加了cut -d '=' -f3|tr -d '",>'来实现这一点。这是可行的,但需要3秒来处理一个包含20,000条记录的文件。我每天有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>发布于 2016-06-05 13:55:12
$ 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发布于 2016-06-05 13:03:48
当其他字段没有像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/'https://stackoverflow.com/questions/37636459
复制相似问题