批量处理80000个XML文件:保留指定行内容的技术问询
批量处理XML文件保留指定行的方案
前置准备:备份文件
批量处理前务必先备份所有XML文件,避免误操作导致数据丢失:
cp -r /path/to/your/xml_directory /path/to/xml_backup
方案一:awk + Shell 循环(推荐)
awk在处理行号和字符串匹配时灵活性高,适合大文件批量场景。创建并执行以下脚本:
#!/bin/bash # 遍历目标目录下所有.xml文件(若需包含子目录,见下方扩展) for xml_file in /path/to/your/xml_directory/*.xml; do # 筛选保留指定行号或包含目标字符串的行,先输出到临时文件再替换原文件 awk 'NR==41 || NR==65 || NR==120 || /InvestorIdentifier/ || /PoolID/' "$xml_file" > "$xml_file.tmp" && mv "$xml_file.tmp" "$xml_file" done
扩展:处理子目录中的XML文件
如果目录下存在嵌套子目录,用find命令遍历所有.xml文件:
find /path/to/your/xml_directory -name "*.xml" -exec sh -c ' awk "NR==41 || NR==65 || NR==120 || /InvestorIdentifier/ || /PoolID/" "$1" > "$1.tmp" && mv "$1.tmp" "$1" ' _ {} \;
方案二:GNU sed 实现
若系统已安装GNU sed,也可使用以下脚本:
#!/bin/bash for xml_file in /path/to/your/xml_directory/*.xml; do sed -n '41p;65p;120p;/InvestorIdentifier/p;/PoolID/p' "$xml_file" > "$xml_file.tmp" && mv "$xml_file.tmp" "$xml_file" done
注意事项
- 先选取少量测试文件运行脚本,确认保留的内容符合预期后,再批量处理全部文件
- 若在Windows环境下操作,可通过Git Bash、WSL(Windows Subsystem for Linux)运行上述Shell脚本
- 脚本中
/path/to/your/xml_directory需替换为你的XML文件实际存放路径
内容的提问来源于stack exchange,提问作者Aisha Awan
相关产品推荐
相关产品推荐

