は、区切り文字が</record>\n<record>
だったら私が行うことができるだろう</record><record>
パイプを複数行として一の長い行が
で区切られ、私は改行を含まないXMLファイルの束を持っていると言うが、基本的には、レコードの長いリストが含まれていますcatは1行に1つのレコードを出力するため、cat *.xml | grep xyz | wc -l
のようなもので、対象のレコードのインスタンスを数えます。
SOMETHING *.xml | grep xyz | wc -l
を書く方法はありますか?SOMETHING
はレコードを1行に1つストリーム配信できますか?私はこのためにawk
を使ってみましたが、ファイル全体をメモリにストリーミングするのを避ける方法を見つけることができませんでした。
うまくいけば、問題は、あなたのレコード体が<
または/
または>
ようには文字を持っていない場合、あなたはこの試みることが十分に明確:)
これは私の 'awk'よりはるかに高速ですが、' sed'はファイル全体をメモリに読み込みます。もっと「ストリーミング」バージョンはありますか? XMLファイルのサイズが大きければどうなるでしょうか? – nicolaskruchten
@nicolas:Perlと 'read'関数(' <> '演算子ではない)を使って、ファイルのチャンクを読み込み、改行を挿入し、書き出すことができます。トリックビットは、ブロック13が ' 'シーケンスの途中で終了するのに不利な場合に、次の部分で処理するために後続コンテキストを保持することを保証することです。特にブロック13が '<'や ''で終わっている場合は、ブロック14が '/ record>'または 'record>'を開始した場合にそれらの文字を残しておく必要があることに注意してください。この種の分割を行うための標準的なユーティリティはないと思います。ほとんどのUnixユーティリティは回線上で動作します。 –
少し読みやすく: 'sed $ 's | |&\ n | g '... ' - bashの構文[' $' ''](http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting)を使用します。文字列のエスケープシーケンスを有効にします。 –