如何在shell中的某个列下搜索特定的字符串

时间:2014-12-06 23:47:38

标签: regex shell

假设我有一个.csv文件,如果我要在excel中打开它,它会看起来像

 Bob     Jane     Alice
 blue    blue     yellow
 red     yellow   yellow
 blue    blue     red
 .        .        . 
 .        .        . 
 .        .        .

等等。所以假设我只对#34; Alice"感兴趣。专栏,我想搜索Alice下有多少" yellow" s,我该怎么做?

 grep yellow | wc -l 

这将查找有多少黄色并计算行数。但是,如何在计算黄色数量之前提取Alice列?

2 个答案:

答案 0 :(得分:1)

这是一个简单的命令,我假设.csv文件使用“,”作为分隔符。

 cat <file> | cut -d, -f3 | grep yellow | wc -l

如果你不知道你想要哪个列但知道你可以使用这样的名字。

 export column=`head -1 <file> | sed 's/Alice\(.*\)/,/' | tr -dc ',' | wc -c`
 cat <file> | cut -d, -f${column} | grep yellow | wc -l

答案 1 :(得分:1)

使用awk选择所需的列,您可以轻松扩展该过程并将名称(本例中为Alice)作为变量提供给awk。

awk -F' *' '{
    for(i = 1; i <= NF; i++) { 
        if ($i == "Alice") {
            ix=i         
        }         
    } 
    print $ix 
}' <file> | grep yellow | wc -l

这应该有用。

注意:此awk调用假定字段由未定义的空格量分隔。如果字段以逗号分隔,请将awk -F' *'更改为awk -F','