次の内容を含むテキストファイルがあります。
"random
textA"
"random
random
textB"
区切り文字は"
次のようにbashコマンドを使用して、包含を複数のファイルに分割するにはどうすればよいですか?
ファイル1:
random
textA
ファイル2:
random
random
textB
csplit
またはawk
を使用した例を思いつきましたが、このテキストレイアウトはカバーされていません。
単純なawk
コマンド:
awk 'NR%2==0{ print > "File "++i }' RS='"' file
RS
は"
をレコード区切り記号として定義し、NR
はレコード番号です。レコード番号が2のモジュロだった場合(レコードの最初の"
があるため)、現在のレコード$0
をFile #
に出力します。
開始引用符が常に行の先頭にある場合、csplitは次のようにうまく機能します。
bash$ csplit /tmp/data '/^"/'
これにより、xx00などのファイルが生成されます。例では、引用符が削除されていますが、これは削除されません。これを行うには、sedコマンドラインが必要です。
bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done
GNU awk
awk -v RS='"[[:space:]]*"' '
{sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt
できるよ:
awk -v RS=\" -v ORS= \
'{ sub(/^\n*/,"");sub(/\n*$/,""); };
/^\n*$/ { next;};
{ if(strcnt==0) { print $0 >"file1"; strcnt++;} else
{ print $0 >"file2"; }; }' file