2016-06-25 23 views
-3

私は大きな900MBのxmlファイルを持っており、ファイル全体が1行だけです。タグ間に改行はありません。私はそのファイル内の特定のタグの出現を数える必要があります。大きなファイルの文字列の出現回数をカウントする

私は私がgrep: line too longエラーを取得

grep -o '<start tag>' filename | wc -l 

を試してみました。

どうすればこの問題を回避できますか?

+0

'sed'を....... ..? –

+0

はsedの/ /を試しました\ n/g 'test.log | grep -c ""しかし、これは再び私がgrepを実行すると小さなファイルで動作しますが、私の場合はgrepが長すぎるエラーを返します – md1980

+0

@ md1980そのgrepや 'sed'はその場合(あなたの最後のコメント)です。 – Kusalananda

答えて

0

はここでハックのビットです:

perl -ne 'BEGIN { $/ = ">"; $c = 0 } $c++ if /<start tag>/; END { print "$c\n" }' filename 

アイデアは>代わりの\n(改行)で終了している「行」をループにあります。これは、 "行が長すぎる"エラーを避ける必要があります。

+0

まだ最初に行を読み込まないのですか?私はテストする方法がわかりません... – Kusalananda

+1

@Kusalanandaいいえ、 'BEGIN'ブロックが最初に実行されます(実際には解析時に実行されます)。 – melpomene

0

だけのawkを使用します。

awk -F'<start tag>' '{print NF-1}' file 

それが失敗した場合、あなたは(マルチchar型のRS用)GNU AWKでこれを行うことができます。

awk -v RS='<start tag>' 'END{print NR-1}' file 
関連する問題