次の内容を含むテキストファイルがあります。
"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