"wc -l" を使用すると、ファイルの処理に時間がかかります。より速い選択肢はありますか?

複数の大きなファイルのそれぞれの行数を出力するスクリプトを作成するのに役立ちます。時間がかかるため、一致するすべてのファイルの最後の行番号を表示するコマンドをwc -l使用したいと思います。awkabd*2020-09-21*

  • ls -l abd*2020-09-21*22個の長い(大)ファイルを表示中
  • wc -l各ファイルの結果を見つける必要があります。
  • 現在私が使用している
    wc -l abd*2020-09-21.txt > CCNC_UNIX_COUNTS.txt
    
    しかし、これは非常に時間がかかります。改善に役立つ必要があります。

頑張った

sed -n '$='

matchinvはすべてのファイルに対してループで動作abd*2020-09-21.txtし、結果をファイルに出力する必要があります。CCNC_UNIX_COUNTS

ベストアンサー1

テキストファイルは、インデックスやメタデータを持たないバイトストリームであり、各行の後に改行文字が続く行です。ファイル全体を読む以外に、行数を数える他の方法はありません。wc -lこれは、改行バイトを読み取るバッチスキャン以外に他の操作を実行する必要がないため、効率的に実行できます。一方、awk見てみる他のツールもたくさんあります。コンテンツフィールド分割の実行と同じ行では、実行のために提供したコードを解釈して実行する必要があります。wc -lこれより速いスクリプト言語はありません。

一方、メタデータの欠落が通常問題である場合は、他のファイル形式(SQLiteデータベースなど)を使用することがオプションかもしれません。もちろん、これにより、一般的なテキスト処理ツールを使用してデータを操作することはできませんが、ランダムアクセスが容易になります。または、すべての行を保持するようにデータパスを変更できる場合一定の長さ、ランダムアクセスと行の計算は簡単です(ただし、途中で行を挿入または削除しません)。

おすすめ記事