给定特定参数,使用AWK拆分大型文本文件

时间:2016-08-04 14:39:27

标签: bash awk

您好我试图划分包含商品标签的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个文件。

2 个答案:

答案 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.00NewDirectory.01等。有关详细信息,请参阅man split

    < / LI>