唤醒csv中的第n列

时间:2018-01-30 06:15:49

标签: bash csv awk terminal

制作了一个file.csv。有3行。

"ip","count","filename"
"1.1.1.1","57","somefilename1"
"2.2.2.2","30","2somefilename-2"

尝试以3美元的价格购买,因此它应该只列出第3列。

我尝试了几种方法:

awk '{print $3}' filename.csv  

输出是空白的,我只期待第3列

尝试:

awk' {print $ 1}' filename.csv

显示完整文档而不是第1列,没有任何内容被过滤。

我搜索了stackoverflow并尝试了其他一些方法。但出于某种原因,我要么得到完整的行,要么没有。

我错过的内容听起来很简单

4 个答案:

答案 0 :(得分:2)

您应该使用-F作为“field-separator”,您可以在awk的手册页中找到它,如下所示:

awk -F, '{print $3}' Input_file
”filename”
”somefilename1”
”2somefilename-2”

答案 1 :(得分:1)

使用,作为字段分隔符:

awk -F ',' '{print $3}' filename.csv 

答案 2 :(得分:1)

以下awk解决方案可能对您有帮助。 如果您想获得"的输出,那么以下内容可能有所帮助:

awk -F, '{print $3}'  Input_file

如果您需要没有"的第3列的值,那么以下内容可以帮助您:

awk -F',|"' '{print $(NF-1)}'  Input_file

答案 3 :(得分:1)

默认情况下,awk使用空格作为字段分隔符,如需要将,配置为字段分隔符的其他帖子中所述,否则整行将被视为一个字段。为此,您可以选择以下两种语法:

awk -F',' '{print $3}' input.csv #to avoid bad surprises with you shell trying to interpret your field separator put it between simple quotes.  

或者您也可以在BEGIN子句中定义,或者在执行期间的任何时候使用以下语法定义:

awk 'BEGIN{FS=","}{print $3}' input.csv