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