我有多个带有 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)