1

$ で区切られたテキスト (1 から N まで) を含むファイルを取得したとします。最終結果が N 個のファイルになるように、ファイルを分割するにはどうすればよいでしょうか?

改行付きの text1 $
text2 $etc... $
textN

私は awk や sed で何かを考えていますが、そのようなタスクを既に実行している利用可能な UNIX アプリはありますか?

4

5 に答える 5

3

awk 'BEGIN{RS="$"; ORS=""} { textNumber++; print $0 > "text"textNumber".out" }' ファイル名

アイデアをくれた Bill Karwin に感謝します。

編集 : ORS="" を追加して、各ファイルの最後に改行を出力しないようにします。

于 2008-11-14T18:11:25.317 に答える
2

多分split -p パターン

うーん。それはまさにあなたが望むものではないかもしれません。行を分割するのではなく、パターンを見たときに新しいファイルを開始するだけです。また、BSD 関連のシステムでのみサポートされているようです。

次のようなものを使用できます。

awk 'BEGIN {RS = "$"} { ... }'

編集:{ ... }ここでその部分のインスピレーションを見つけることができます:

http://www.gnu.org/manual/gawk/html_node/Split-Program.html

編集: dmckee からのコメントのおかげcsplitで、パターンが発生する行全体をコピーするようにも見えます。

于 2008-11-14T15:53:02.240 に答える
1
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
于 2010-01-06T07:31:32.293 に答える
1

split コマンドを使用すると、文字列を使用して分割できます。

ただし、 csplit コマンドを使用すると、正規表現に基づいてファイルを分割することもできます。

于 2010-01-06T11:46:16.947 に答える
1

これを正しく読んでいれば、これには UNIX のcutコマンドを使用できます。

cut -d $ -f 1- filename

構文が少しずれている可能性がありますが、$ で区切られたフィールドを使用していて、フィールド 1 から最後までを返すことを cut に伝える必要があります。

$ をエスケープする必要がある場合があります。

于 2008-11-14T16:32:28.230 に答える