我需要从几百个文件中剪切第 5 列和第 6 列



>我有多个CSV文件。我需要从中删除第 5 列和第 6 列。示例file.csv

column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52

我已经搜索过了,似乎没有什么像它应该的那样简单。我希望有一个sed的解决方案,以便它将就地更新每个文件。我不会重命名文件,它们将保持不变,除了剪切文件现在将消失。

您可以在

循环中使用cut,假设所有文件至少有 7 列:

for file in *.csv; do
  cut -f1-4,7- -d, "$file" > "$file".reduced
  # move reduced file to original once tested
  # mv "$file".reduced "$file"
done
  • -f1-4,7- => 获取字段 1-4,然后从 7 开始(基本上,删除 5 和 6(

使用 GNU sed:

 sed 's/,[^,]*//4;s/,[^,]*//4' file

添加 -i 标志以就地编辑文件:

sed -i 's/,[^,]*//4;s/,[^,]*//4' file

或更短:

sed 's/([^,]*,){2}//3' file
perl -p -i -e '{if(/(.*),(.*),(.*),(.*),.*,.*,(.*)/) {print "$1,$2,$3,$4,$5n"}}' file.csv

这将在删除第 5 列和第 6 列后直接更新文件。

最新更新