私のフォルダには、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 1
findを非再帰的に作成します(つまり、サブディレクトリを検索しません)。利用できない-prune
場合は-maxdepth
使用できます。