删除CSV文件中的额外逗号和双引号并提取特定列

时间:2014-06-09 19:22:04

标签: linux ubuntu csv awk

我有一个.csv文件,如下所示,我需要删除双引号之间的额外逗号并提取第2,第3和第7个字段。

示例输入:

John,qa,mv,tom,"principal, qa",6501234567,john@gmail.com

输出应如下所示:

qa,mv,john@gmail.com

4 个答案:

答案 0 :(得分:2)

您想要使用正确的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

答案 1 :(得分:1)

awk / sed解决方案

awk '{print  $2, $3, $7}' file |sed 's/"//g'

答案 2 :(得分:1)

或使用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,因此请适当地使用索引来打印所需的值。

答案 3 :(得分:1)

假设恰好有两次出现"

awk -F',' -v OFS=',' '{sub(/".*"/,""); print $2,$3,$7;}' input.txt

输出:

qa,mv,john@gmail.com