3

私はCを使用して大きなフラットファイルを解析し、関連する行を出力ファイルに出力しています。出力ファイルは約70,000行である必要があります。

geditでファイルを開くと、正しい行数と行の長さで、期待どおりに表示されます。

ただし、実行するとwc -l <file>13,156が返されます。ですgrep -c "" <file>

tail <file>geditに表示される最後の10行を返します。head <file>最初の10行を返します。しかしtail -n +8000 | head -n 1、8,000行目を返すはずの、は、geditの34,804行目に表示されるテキストを返します。

ファイルに改行文字がない場合は、これらの結果を期待します。しかし、geditには問題がないようです。さらに、wc -L <file>最大行長を表示する、は、予想どおり、142バイトを返します。予想通り、ファイルのサイズは9,000,000バイト強です。

wc -L <file>= 142、およびwc -c <file>= 9046609の場合、どうすれば= 13156になりwc -l <file>ますか?

このファイルに書き込むときに私が間違ったことを誰かが知っていますか?

4

1 に答える 1

3

おそらく改行文字 ('\r') と改行文字 ('\n') の奇妙な組み合わせです。

「tr」の GNU Coreutils バージョンがあると仮定すると、これらのコマンドを使用して、ファイル内の各文字の数をカウントできます。

tr -d -c '\n' FILE | wc -c

tr -d -c '\r' FILE | wc -c

通常の Unix スタイルのテキスト ファイルの場合、2 番目のコマンドは 0 を出力する必要があります。Windows スタイルのテキスト ファイルの場合、両方とも同じ数値を出力する必要があります。

「file」コマンドも、おそらく役立つ情報を教えてくれるでしょう。

于 2011-07-23T20:26:43.410 に答える