ディレクトリ内のすべてのテキストファイルで最長行の長さを見つけます。

ディレクトリ内のすべてのテキストファイルで最長行の長さを見つけます。

テキストファイルで最長行の長さを取得する方法を知っています。awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

しかし、ディレクトリ内のすべてのファイルの中で最も長い行の長さを取得する方法は?

答え1

最も簡単な解決策は、すべてのファイルをリンクし、結果をスクリプトにパイプすることです。

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

複数のファイルを awk に直接渡すこともできます。

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

もちろん、ファイルが実際にディレクトリである場合、いくつかの警告が表示されることがありますが、有害ではありません。バイナリには概念がないため、より大きな問題がある可能性があります。ワイヤー。より具体的に言えば、次のようにすることができます。

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

.txt現在のディレクトリのファイルのみが一致します。

そして@ G-Manが自分の意見で言ったように、*この隠しファイル(ドットで始まる)は一致しません。これが必要な場合はを使用してください* .*

答え2

GNUの使用wc:

cat *.txt|wc -L

-L最長行の長さを出力します。

答え3

各ファイルの最大長が必要な場合は、GNU awkを使用してください。

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

またはすべてのファイルの最大長:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

ファイルが改行文字で終わるとします。ファイルが改行で終わらない場合、最後の区切りのない行が次のファイルの最初の行とマージされ、結果が無効になる可能性があります。

-size +1c空白または1文字のテキストファイルにはそれぞれ0行と1つの空白行があるため、最長行がないため最適化です。

答え4

また、複数のファイルを処理できるGNU wc(coreutils 8.4)を使用してください。

wc -L *.txt
  • 各個別ファイルの長さをリストします。
  • すべてのファイルの最大長を提供します。

関連情報