【发布时间】:2014-06-09 19:22:04
【问题描述】:
我有一个 .csv 文件,如下所示,我需要删除双引号之间的多余逗号并提取第二、第三和第七个字段。
示例输入:
John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com
输出应如下所示:
qa,mv,john@gmail.com
【问题讨论】:
我有一个 .csv 文件,如下所示,我需要删除双引号之间的多余逗号并提取第二、第三和第七个字段。
示例输入:
John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com
输出应如下所示:
qa,mv,john@gmail.com
【问题讨论】:
您需要使用适当的 CSV 解析器。例如,使用 ruby:
echo 'John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com' |
ruby -rcsv -ne '
row = CSV.parse_line($_)
puts CSV.generate_line([row[1],row[2],row[6]])
'
qa,mv,john@gmail.com
【讨论】:
awk/sed 解决方案
awk '{print $2, $3, $7}' file |sed 's/"//g'
【讨论】:
或者使用perl's内置模块Test::Parsewords。
$ cat file
John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com
$ perl -MText::ParseWords -lne '
@line = parse_line(",", 1, $_);
print join "," , @line[1,2,6]
' file
qa,mv,john@gmail.com
请注意,数组的索引为 0,因此适当地使用索引来打印所需的值。
【讨论】:
假设" 恰好出现两次
awk -F',' -v OFS=',' '{sub(/".*"/,""); print $2,$3,$7;}' input.txt
输出:
qa,mv,john@gmail.com
【讨论】: