私は大きな900MBのxmlファイルを持っており、ファイル全体が1行だけです。タグ間に改行はありません。私はそのファイル内の特定のタグの出現を数える必要があります。大きなファイルの文字列の出現回数をカウントする
私は私がgrep: line too long
エラーを取得
grep -o '<start tag>' filename | wc -l
を試してみました。
どうすればこの問題を回避できますか?
私は大きな900MBのxmlファイルを持っており、ファイル全体が1行だけです。タグ間に改行はありません。私はそのファイル内の特定のタグの出現を数える必要があります。大きなファイルの文字列の出現回数をカウントする
私は私がgrep: line too long
エラーを取得
grep -o '<start tag>' filename | wc -l
を試してみました。
どうすればこの問題を回避できますか?
はここでハックのビットです:
perl -ne 'BEGIN { $/ = ">"; $c = 0 } $c++ if /<start tag>/; END { print "$c\n" }' filename
アイデアは>
代わりの\n
(改行)で終了している「行」をループにあります。これは、 "行が長すぎる"エラーを避ける必要があります。
まだ最初に行を読み込まないのですか?私はテストする方法がわかりません... – Kusalananda
@Kusalanandaいいえ、 'BEGIN'ブロックが最初に実行されます(実際には解析時に実行されます)。 – melpomene
だけのawkを使用します。
awk -F'<start tag>' '{print NF-1}' file
それが失敗した場合、あなたは(マルチchar型のRS用)GNU AWKでこれを行うことができます。
awk -v RS='<start tag>' 'END{print NR-1}' file
'sed'を....... ..? –
はsedの//を試しました\ n/g 'test.log | grep -c ""しかし、これは再び私がgrepを実行すると小さなファイルで動作しますが、私の場合はgrepが長すぎるエラーを返します –
md1980
@ md1980そのgrepや 'sed'はその場合(あなたの最後のコメント)です。 – Kusalananda