计算 CSV 列数并删除

计算 CSV 列数并删除

我有多个带有 mv 前缀的 csv 文件。我的目标是从包含 5 列(但不是其他列)的文件中删除特定列(命名或按编号)。

for f in mv*.csv
do
    ln= $(echo "$f" | awk '{print NF}' | sort -nu | head -n 1)
    if [ln==4]
    then
        $(echo "$f" cut -d, -f2,4 --complement >> $f)
    fi
done

第三行抛出“命令未找到”错误,所以我什至没有测试我的“剪切”部分。我缺少什么?

PS - 我很乐意理解我的错误,以便更好地了解 bash,但是任何仅使用 sed/awk/python/whatever 的解决方案也很棒。

谢谢

答案1

使用csvcut来自csvkit

$ csvcut -C 5 data.csv >data-new.csv

这将从中删除第 5 列data.csv并将结果保存到data-new.csv.

$ csvcut -C "comment" data.csv >data-new.csv

这将从中删除名为comment(根据文件中的标题行)的列data.csv并将结果保存到data-new.csv.

答案2

您将文件名传递给 awk,但应该传递其内容:

ln= $(cat "$f" | awk '{print NF}' | sort -nu | head -n 1)

或更好:

ln= $(awk '{print NF}' "$f" | sort -nu | head -n 1)

相关内容