假设我有一个.csv文件,如果我要在excel中打开它,它会看起来像
Bob Jane Alice
blue blue yellow
red yellow yellow
blue blue red
. . .
. . .
. . .
等等。所以假设我只对#34; Alice"感兴趣。专栏,我想搜索Alice下有多少" yellow" s,我该怎么做?
grep yellow | wc -l
这将查找有多少黄色并计算行数。但是,如何在计算黄色数量之前提取Alice列?
答案 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','
。