您好我试图划分包含商品标签的xml文件。由于我在一个文件中有250个项目,我想将整个文件分成5个较小的文件,每个文件包含50个项目(及其内容)。
我从这个链接获得了什么Linux script: how to split a text into different files with match pattern
awk '{if ($0 ~ /<item>/) a++} { print > ("NewDirectory"a".xml") }'
然而,这将每个项目的整个文件分成1个文件。所以我需要帮助修改这个语句,将文件分成每50个项目1个文件。
答案 0 :(得分:1)
假设您的原始命令执行了您所说的操作,并且您完全理解了尝试使用awk解析XML的问题:
awk '/<item>/ && (++a%50 == 1) { ++c } { print > ("NewDirectory"c".xml") }'
如果你有很多文件同时打开并且没有使用GNU awk,你可能需要在那里添加一个close()。只是得到gawk。
另外,要学习awk,请阅读Arnold Robbins撰写的有效Awk编程,第4版。
答案 1 :(得分:0)
尝试:
awk '$0~/<item>/' | split -l50 -d - NewDirectory.
说明:
awk
只会提取包含<item>
split
会将stdin拆分为包含50行的文件,名为NewDirectory.00
,NewDirectory.01
等。有关详细信息,请参阅man split
。