列出所有 .txt 文件并计算列数

Sri*_*A.H 3 awk

如何列出所有 .txt 文件(管道分隔文件)以及目录中每个文件的列数?

Sté*_*las 5

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

会打印类似的东西

./dir/foo.txt: 2
Run Code Online (Sandbox Code Playgroud)

对于名称以.txtwhere结尾的每个常规非空文件,"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}' {} +
Run Code Online (Sandbox Code Playgroud)