区切り文字の間のテキストを複数のファイルに分割するには?

区切り文字の間のテキストを複数のファイルに分割するには?

次の内容を含むテキストファイルがあります。

"random
textA"
"random
random
textB"

区切り記号は次のとおりです。"

以下のようにbashコマンドを使用してインクルードを複数のファイルに分割するには?

ファイル1:

random
textA

ファイル2:

random
random
textB

csplit私は例を使用しましたが、awkこのテキストレイアウトを扱いません。

答え1

簡単なawkコマンド:

awk 'NR%2==0{ print >("File " ++i) }' RS='"' infile

RSレコード番号である"レコード区切り文字として定義されます。NRレコード番号がモジュロ2の場合("別のレコードの最初のレコードがあるため)、現在のレコード$0をに印刷しますFile #

答え2

次のように開く引用符が常に行の先頭にある場合、csplitは正しく機能します。

bash$ csplit /tmp/data '/^"/'

これにより、xx00などのファイルが生成されます。あなたの例では引用符を削除しましたが、この例では引用符を削除しませんでした。これを行うには、コマンドラインsedが必要です。

bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done

答え3

GNUと共にawk

awk -v RS='"[[:space:]]*"' '
{sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt

答え4

あなたはできます:

awk -v RS=\" -v ORS= \
  '{ sub(/^\n*/,"");sub(/\n*$/,""); };
  /^\n*$/ { next;};
  { if(strcnt==0) { print $0 >"file1"; strcnt++;} else
  { print $0 >"file2"; }; }' file

関連情報