
如何列出目錄中的所有 .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
為您的目錄和列分隔符號。