为什么我的awk在CSV中提取列有一个尾随双引号?

时间:2016-03-11 19:12:48

标签: macos shell csv awk

我有一个像这样的csv文件。

System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(@G:\Project\dictionary.xml");

我用Google搜索并找到了这个命令。

"cnt","phr"
"3679650","URL1"
"844588","URL2"
"572854","URL3"
"469274","URL4"

我得到了这个结果

awk -F "\"*,\"*" '{print $2}' test.csv

我如何得到?

URL1"
URL2"
URL3"
URL4"

我正在使用OSX

3 个答案:

答案 0 :(得分:3)

您可以将此awk命令与字段分隔符一起用作逗号或双引号:

awk -F '[",]+' 'NR>1{print $3}' file.csv

URL1
URL2
URL3
URL4

或者使用逗号作为字段分隔符的gsub

awk -F, 'NR>1{gsub(/"/, ""); print $2}' file.csv

URL1
URL2
URL3
URL4

答案 1 :(得分:1)

替代awk

$ tr -d '"' <file | cut -d, -f2 | sed 1d
URL1
URL2
URL3
URL4

说明:删除引号,使用逗号分隔符选择第二个字段,删除第一行

答案 2 :(得分:1)

您获得该报价的原因是因为它不是您的字段分隔符。您定义的FS包含逗号。

有一些复杂的正则表达式可以将awk用于CSV数据,但我通常建议使用适当的CSV解析器来解析CSV数据。 Ruby有一个易于使用的方法:

ruby -rcsv -e 'CSV.foreach(ARGV.shift) {|row| puts row[1]}' file

输出

phr
URL1
URL2
URL3
URL4