如何使用grep命令打印列中搜索关键字产生的行,

时间:2014-11-14 04:45:33

标签: linux bash unix csv grep

这是filename.csv文件的示例

"Sort Order","Common Name","Formal Name","Type","Sub Type"

"1","Afghanistan","Islamic State of Afghanistan","Independent State"    
"2","Albania","Republic of Albania","Independent State"    
"3","Algeria","People's Democratic Republic of Algeria","Independent State"    
"4","Andorra","Principality of Andorra","Independent State"    
"5","Angola","Republic of Angola","Independent State"

那么用通用名搜索angola的grep命令是什么,并按照以下方式打印:

"5","Angola","Republic of Angola","Independent State"

我知道我们可以使用:

grep '"Algeria"' filename.csv

然而,如果我更具体,该怎么办?假设阿尔及利亚可能存在于其他专栏中,但我们只需在Common Name列中打印一个。

我试过

grep '"Common Name | Algeria"' filename.csv

似乎不起作用。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用以下grep命令打印第二列中包含字符串Angola的行。

grep -E '^"[^"]*","Angola"' file

这可以通过awk轻松完成,

awk -F, '$2=="\"Angola\""' file

答案 1 :(得分:1)

尝试awk

awk -F"," '$2~/Algeria/' file

答案 2 :(得分:0)

使用cut命令,

 grep Algeria filename.csv|cut -f2 -d','|awk -F '[""]' '{print $2}'

输出:

Algeria

以下是我在grep添加的所有命令的说明,并放弃了您在其中使用的一些不必要的引号。

cut命令:

-f它将根据分隔符提取第二列

-d它将选择分隔符,即:,

awk命令:

它将在两个""(块引号)之间提取值并打印出来。