我有一个大的.csv文件,如下所示:
ABC,10,< 10.0,10.0,ABC
ABC,< 0.9,10,10.0,ABC
我需要删除包含“<”的字段。有时它只是“<”和数字,有时它包含空格,它可以出现在任何列上。这是我正在寻找的输出:
ABC,10,10.0,ABC
ABC ,, 10,10.0,ABC
我最接近成功的是
grep -oP '(?<=,)(<.*?)(?=,)' text.csv
印刷
&LT; 10.0
&LT; 0.9
这是我要删除的内容。但
sed -i 's/(?<=,)(<.*?)(?=,)/ /g' text.csv
不起作用。
我要求 sed 解决方案,因为我对它有点熟悉。但欢迎所有建议。谢谢!
答案 0 :(得分:4)
使用sed:
sed 's/[^,]*<[^,]*//g' file
使用awk
awk '{for (i=1;i<=NF;i++) if ($i~/</) $i=""}1' FS=, OFS=, file
ABC, 10,, 10.0, ABC
ABC,, 10, 10.0, ABC
答案 1 :(得分:2)
awk -F, -v OFS="," '{for(i=1;i<=NF;i++)if($i~/</)$i=""}7' file
测试
kent$ echo "ABC, 10, <10.0, 10.0, ABC
ABC, < 0.9, 10, 10.0, ABC"|awk -F, -v OFS="," '{for(i=1;i<=NF;i++)if($i~/</)$i=""}7'
ABC, 10,, 10.0, ABC
ABC,, 10, 10.0, ABC
答案 2 :(得分:2)
按要求使用sed。
sed 's/[ ]*<[^,]*//g'
答案 3 :(得分:0)
此awk
应该:
awk '{gsub(/ ?< ?[^,]*/,x)}8' text.csv
ABC, 10,, 10.0, ABC
ABC,, 10, 10.0, ABC