-2

私は非常によく似たStackOverflowの質問を理解するために最善を尽くしましたが、私の人生では、提案された解決策gawkまたはsplit解決策のいずれかを私の場合に機能させることはできません。

288の提案で構成される大きなテキストファイルがあります。各提案の長さは300〜500語で、段落数はさまざまです(したがって、行数に一貫性はありません)。ただし、各提案の先頭には、次の性質の識別子があります。--###--または--####--。終了マーカーはありません。ただし、複数のファイルに分割する前に、正規表現検索を実行して元のファイルを置き換えることで、終了マーカーを挿入できると思います。私が欲しいのは、288個の個別のテキストファイルのコレクションです。各ファイルには、2つのダッシュの間の番号で名前が付けられています。簡単にできれば、3つの数字で始まる提案と4つの数字で始まる提案の間でファイルを簡単に分割できます。

一言で言えば、私はこれをしたいです:

#! /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.
4

3 に答える 3

1

ヘッダーのある行が表示されるたびに、出力ファイルの名前を設定するだけです。

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

これにより、ヘッダー行がファイルに出力されることに注意してください。nextそれが不要な場合は、ヘッダーのアクションシーケンスにコマンドを追加します。

于 2012-06-18T20:19:49.953 に答える
0

数行の正規表現を使用して、Pythonでこれを解決できます。ドキュメントをご覧ください。

この場合のアイデアは、識別子を検索することです。この場合、次のような式を使用できます。

r'(--[0-9]*--)'

特に、re.splitをご覧ください

于 2012-06-18T20:25:04.913 に答える
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++;
}
于 2012-06-18T20:26:48.157 に答える