各ファイルの列数とともに、ディレクトリ内のすべての.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}' {} +