如何列出目录中的所有 .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 }"
只需将DIRECTORY
and替换SEPARATOR
为您的目录和列分隔符。