2016-03-11 24 views
1

我有一個這樣的CSV文件。爲什麼我的awk提取一個CSV列有尾隨雙引號?

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

我用Google搜索了一下,發現這個命令。

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

我得到這樣的結果

URL1" 
URL2" 
URL3" 
URL4" 

如何我只是得到?

URL1 
URL2 
URL3 
URL4 

我使用OSX

回答

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

替代awk

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

說明:刪除引號,用逗號分隔符選擇第二個字段,刪除第一行

1

原因你得到的報價是因爲它不是你的字段分隔符。您定義的FS包含逗號。

對於CSV數據,有複雜的正則表達式可用於awk,但我通常會推薦一個適當的CSV解析器來解析CSV數據。 Ruby有一個很容易的工作:

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

其輸出

phr 
URL1 
URL2 
URL3 
URL4 
相關問題