我有一个csv文件,格式如下..
001,"Craig,betsy",Newyork
002,"sam.nathan",charlotte
我需要在文件中的双引号内找到逗号..请帮助我在unix或perl中获取正则表达式。
或者避免使用双引号内的逗号..
我需要输出文件像这样
001 | “雷格,贝齐” |纽约
002 | “sam.nathan” |。夏洛特
请帮助添加输入..
答案 0 :(得分:1)
Perl One-Liner
根据您的输入,您可以使用:
perl -ne 'while(m/"[^",]+\K,(?=[^",]*")/g){print "$&\n";}' yourfile
答案 1 :(得分:0)
以下是awk
,会将提交的分隔符更改为|
awk -F, '{for (i=1;i<NF;i++) {c+=gsub(/\"/,"&",$i);printf "%s"(c%2?FS:"|"),$i}print $NF}' t
001|"Craig,betsy"|Newyork
002|"sam.nathan"|charlotte
它将数据划分为由,
分隔的组。然后计算它在每个字段中找到的"
个数
当数字可以除以2时,如果不使用|
,
如果您有gnu awk 4.xxx
,则可以使用FPAT
awk '{for (i=1;i<NF;i++) printf "%s|",$i;print $NF}' FPAT='[^,]+|"[^"]+"' t
001|"Craig,betsy"|Newyork
002|"sam.nathan"|charlotte
这FPAT='[^,]+|"[^"]+"'
如何运作?
它定义了一个字段的样子,而不是分隔符
[^,]+
字段是一些不包含,
或
的字段
"[^"]+"
部分以"
开头,然后字符不等于"
,以"
结尾。 Eks "my,data"
或"data"