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)
对于名称以.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}' {} +
Run Code Online (Sandbox Code Playgroud)