複数のファイルの中で最も長い行の長さを見つけて印刷しますか?

複数のファイルの中で最も長い行の長さを見つけて印刷しますか?

私のフォルダには、A0001-A2000というラベルの付いたファイルが2000個あります。各ファイルの2行目には、長い(最も長くなければならない)行文字があります。 2行目の長さで、1つの出力にすべてのファイル名を印刷したいと思います。

だから出力は次のようになります

A0001 231
A0002 123
A0003 56

役に立つ場合は、ファイルの最長行を印刷するコードがすでにありますが、より簡単な方法がある場合はawkを使用しません。

$ awk '{print length}' A0001.txt |sort -nr|head -1
231

ベストアンサー1

awk 'FNR==2{print FILENAME,length; nextfile}' *

globはディレクトリ内のすべてのファイルに展開され、Awkが2行目に達すると、ファイル名と長さを印刷して次のファイルに移動します。これはnextfileオプションであり、パフォーマンスのみを目的としています。

ディレクトリに異常なファイルがある可能性がある場合は、Findを使用してawkがフリーズしないようにしてください。

find . -type f -maxdepth 1 -exec awk 'FNR==2{print FILENAME,length; nextfile}' {} +

-maxdepth 1findを非再帰的に作成します(つまり、サブディレクトリを検索しません)。利用できない-prune場合は-maxdepth使用できます。

おすすめ記事