すべての.txtファイルを一覧表示し、列数を数えます。

すべての.txtファイルを一覧表示し、列数を数えます。

各ファイルの列数とともに、ディレクトリ内のすべての.txtファイル(パイプ区切りファイル)をどのように一覧表示できますか?

ベストアンサー1

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  FNR == 1 {print FILENAME ": " NF; nextfile}' {} +

次のようなものを印刷します

./dir/foo.txt: 2

.txt名前がwhereで終わるすべての空でない通常のファイルの場合、ここでは"2"ファイルの最初の行にある区切りフィールドの数です。|

nextfileこれは、すべての実装で使用できるわけではありませんが、awk使用できない場合は無害でなければなりません(awk ファイルを完全に読み取るため効率が悪くなります)。

空でないすべての行で同じ数の列を持つファイルのみを考慮するには、GNUを使用してくださいawk

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  BEGINFILE {n = 0}
  NF {
    if (n && NF != n) {
      print "skipping "FILENAME" ("NF" != "n")" > "/dev/stderr"
      n = 0; nextfile
    }
    n = NF
  }
  ENDFILE {if (n) print FILENAME ": " n}' {} +

おすすめ記事