我有一个CSV文件,其中包含9个字段和更多行。我想在第6个字段中替换“to”,除了最后一个和第一个“all in it should be replaced from”to“
请参阅下面的输入和输出文件示例
输入
“MCDW”,“6HV-00014”,“CDW公司”,“A931216”,“”,“安装壁装式PPI显示器,最大55”bsgdf“,”08/28/2018“,”20180830212807“,”
输出
“MCDW”,“6HV-00014”,“CDW公司”,“A931216”,“”,“安装壁装式PPI显示器,最大55”“bsgdf”,“08/28/2018”,“20180830212807”

最佳答案

您可以使用perl实现这一点。首先,我将在第6列中使用十六进制字符x22将所有双引号替换为它的两倍。其次,我要检查
第一个和最后一个字符以双引号结尾。如果是,它们将被移除。我又添加了两条记录,修改了第6列,以表明它是有效的。请参阅下面的代码。

> cat 6th_column.dat
"MCDW","6HV-00014","CDW CORPORATION","A931216","","INSTALL WALL MOUNT PPI DISPLAY UP TO 55" bsgdf","08/28/2018","20180830212807",""
"MCDW2","6HV-00014","CDW CORPORATION","A931216","",INSTALL WALL MOUNT PPI DISPLAY UP TO 55" bsgdf,"08/28/2018","20180830212807",""
"MCDW3","6HV-00014","CDW CORPORATION","A931216","","INSTALL WALL MOUNT PPI DISPLAY "UP TO 55" bsgdf","08/28/2018","20180830212807",""
"MCDW3","6HV-00014","CDW CORPORATION","A931216","",INSTALL WALL MOUNT PPI DISPLAY "UP TO 55" bsgdf,"08/28/2018","20180830212807",""
>
> perl -a -F, -ne  ' $x=${F[5]}; $x=~s/\x22/\x22\x22/g;$x=~s/^\x22//g;$x=~s/\x22$//g;  print "$F[0],$x\n" ' 6th_column.dat
"MCDW","INSTALL WALL MOUNT PPI DISPLAY UP TO 55"" bsgdf"
"MCDW2",INSTALL WALL MOUNT PPI DISPLAY UP TO 55"" bsgdf
"MCDW3","INSTALL WALL MOUNT PPI DISPLAY ""UP TO 55"" bsgdf"
"MCDW3",INSTALL WALL MOUNT PPI DISPLAY ""UP TO 55"" bsgdf
>

如果这能解决你的问题,请告诉我。

09-04 20:40