我需要从几百个文件中删除第 5 列和第 6 列
I need to cut columns 5 & 6 from a few hundred files
我有多个 CSV 文件。我需要从中删除第 5 列和第 6 列。例子 file.csv
:
column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52
我已经搜索过了,似乎没有什么比它应该的更简单。我希望有一个 sed
解决方案,这样它就可以更新每个文件。我不会重命名文件,它们将保持不变,除了剪切文件现在将消失。
使用 GNU sed:
sed 's/,[^,]*//4;s/,[^,]*//4' file
添加 -i
标志以就地编辑文件:
sed -i 's/,[^,]*//4;s/,[^,]*//4' file
或更短:
sed 's/\([^,]*,\)\{2\}//3' file
您可以在循环中使用 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)
perl -p -i -e '{if(/(.*),(.*),(.*),(.*),.*,.*,(.*)/) {print ",,,,\n"}}' file.csv
这将在删除第 5 和第 6 列后直接更新文件。
我有多个 CSV 文件。我需要从中删除第 5 列和第 6 列。例子 file.csv
:
column1,column2,column3,mm/dd/yyyy,column5,column6,column7,...,column52
我已经搜索过了,似乎没有什么比它应该的更简单。我希望有一个 sed
解决方案,这样它就可以更新每个文件。我不会重命名文件,它们将保持不变,除了剪切文件现在将消失。
使用 GNU sed:
sed 's/,[^,]*//4;s/,[^,]*//4' file
添加 -i
标志以就地编辑文件:
sed -i 's/,[^,]*//4;s/,[^,]*//4' file
或更短:
sed 's/\([^,]*,\)\{2\}//3' file
您可以在循环中使用 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)
perl -p -i -e '{if(/(.*),(.*),(.*),(.*),.*,.*,(.*)/) {print ",,,,\n"}}' file.csv
这将在删除第 5 和第 6 列后直接更新文件。