列出所有 .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}' {} +

答案2

另一种方法适用于任何awk执行:

find . -type f -name "*.txt" -exec awk -F'|' 'NF{ print FILENAME,NF; exit }' {} \;

  • -F'|'-|视为字段分隔符
  • NF{ ... }- 确保文件中至少有一个字段/列。NF本身指向列数

答案3

find . -name "*.txt" -type f -exec wc -l {} \;

答案4

您的问题不是很清楚,但您可以尝试此命令: find DIRECTORY -name "*.txt" | xargs awk -F "SEPARATOR" "{print FILENAME, NF }" 只需将DIRECTORYand替换SEPARATOR为您的目录和列分隔符。

相关内容