将文本文件分成多个文本文件

时间:2012-06-18 20:09:53

标签: python bash awk gawk

我尽力了解a very similar StackOverflow question,但我无法为我的生活做出建议的gawksplit解决方案。

我有一个包含288个提案的大型文本文件,每个提案长度为300到500字,并且段数不同(因此没有一致的行数)。但是,每个提案都标有以下性质的标识符:--###----####--。没有关闭标记 - 虽然我想我可以通过执行一些正则表达式搜索来插入一个并在原始文件上替换它然后将其拆分为多个文件。我想要的是288个单独文本文件的集合,每个文本文件都由两个破折号之间的数字命名。如果它使事情变得更容易,我可以轻松地将文件分为三个数字和四个数字所引用的提案。

简而言之,我想这样做:

#! /bin/env bash or python

Split all_proposals.txt into 121.txt, 122.txt, etc.

Where all_proposals.txt consists of:

  --121--

  One Line Title of Proposal

  Followed by several paragraphs each on a line of variable length.

  Another paragraph for effect.

  --122--

  More lines indeterminate in number.

3 个答案:

答案 0 :(得分:1)

每次看到带标题的行时,只需设置输出文件的名称:

awk '/--[0-9]*--/ {split( $0, a, "--" ); output=a[2]".txt" }
    { print > output }' all_proposals.txt

请注意,这会将标题行打印到文件中。如果您不想这样,请在标题的操作序列中添加next命令。

答案 1 :(得分:0)

你可以在python中使用regular expressions在几行中解决这个问题。看看文档;

这个想法就是搜索你的标识符,在这种情况下可以使用类似

的表达式
r'(--[0-9]*--)'

请特别注意re.split

答案 2 :(得分:0)

您可以使用perl:

#!/usr/bin/perl
open(FI,"file.txt");
read(FI,$_,10000000);
close(FI);
@arr = split('--###--');
$cnt=0;
for $c (@arr)
{
    open(FO,">$cnt.txt");
    print FO $c;
    close(FO);
    $cnt++;
}