$ で区切られたテキスト (1 から N まで) を含むファイルを取得したとします。最終結果が N 個のファイルになるように、ファイルを分割するにはどうすればよいでしょうか?
改行付きの text1 $
text2 $etc... $
textN
私は awk や sed で何かを考えていますが、そのようなタスクを既に実行している利用可能な UNIX アプリはありますか?
$ で区切られたテキスト (1 から N まで) を含むファイルを取得したとします。最終結果が N 個のファイルになるように、ファイルを分割するにはどうすればよいでしょうか?
改行付きの text1 $
text2 $etc... $
textN
私は awk や sed で何かを考えていますが、そのようなタスクを既に実行している利用可能な UNIX アプリはありますか?
awk 'BEGIN{RS="$"; ORS=""} { textNumber++; print $0 > "text"textNumber".out" }' ファイル名
アイデアをくれた Bill Karwin に感謝します。
編集 : ORS="" を追加して、各ファイルの最後に改行を出力しないようにします。
多分split -p
パターン?
うーん。それはまさにあなたが望むものではないかもしれません。行を分割するのではなく、パターンを見たときに新しいファイルを開始するだけです。また、BSD 関連のシステムでのみサポートされているようです。
次のようなものを使用できます。
awk 'BEGIN {RS = "$"} { ... }'
編集:{ ... }
ここでその部分のインスピレーションを見つけることができます:
http://www.gnu.org/manual/gawk/html_node/Split-Program.html
編集: dmckee からのコメントのおかげcsplit
で、パターンが発生する行全体をコピーするようにも見えます。
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
split コマンドを使用すると、文字列を使用して分割できます。
ただし、 csplit コマンドを使用すると、正規表現に基づいてファイルを分割することもできます。
これを正しく読んでいれば、これには UNIX のcutコマンドを使用できます。
cut -d $ -f 1- filename
構文が少しずれている可能性がありますが、$ で区切られたフィールドを使用していて、フィールド 1 から最後までを返すことを cut に伝える必要があります。
$ をエスケープする必要がある場合があります。