计算 CSV 文件中的列数,如果少于 11 列则重命名

dan*_*res 3 awk rename csv files

我需要计算 CSV 文件中的列数。如果小于 11,重命名附加.bad后缀的文件。我试过这个,但它缺少我需要的东西:

head -1 myfile.csv | sed 's/[^,]//g' | wc -c
Run Code Online (Sandbox Code Playgroud)

我需要对目录中的所有文件执行此操作。

gle*_*man 5

for file in *.csv; do
    cols=$( awk -F, 'NR == 1 {print NF; exit}' "$file" )
    if [[ "$cols" -lt 11 ]]; then
        mv -v "$file" "$file.bad"
    fi
done
Run Code Online (Sandbox Code Playgroud)

或者,使用没有 awk 的 bash

for file in *.csv; do
    IFS=, read -ra fields <"$file"
    if [[ "${#fields[@]}" -lt 11 ]]; then
        mv -v "$file" "$file.bad"
    fi
done
Run Code Online (Sandbox Code Playgroud)

  • 很好,不需要 NR==1,因为出口就在那里.. (2认同)