Grep 统计出现次数

Grep 统计出现次数

我是 Linux 新手,有一个 CSV 文件(示例如下)。我需要确定亚洲女性的数量。我尝试运行以下命令,因为我试图确定唯一的种族计数,但似乎无法正确执行。任何帮助表示赞赏!期望输出: 2 名亚洲女性

grep “Asian”, ‘,’ filename.csv | sort | uniq -c
种族 性别
2001年 白色的 女性
2001年 亚洲人 女性
2001年 白色的 男性
2001年 西班牙裔 男性
2001年 亚洲人 女性

答案1

尝试grep -c

printf '%d Asian Females\n' $(grep -c ',Asian,Female$' filename.csv)

答案2

更新

grep -F Asian filename.csv | grep -F -c Female

引用自man grep

-c, --count
             Only a count of selected lines is written to standard output.

感谢@terdon。


grep -F Asian filename.csv | grep -F Female | wc -l
  • grep -F- 将模式解释为一组固定字符串。
  • wc -l- 打印行数。

答案3

多种方法中的一种:

echo "$(grep 'Asian' filename.csv | grep -c 'Female') Asian Females"

答案4

grep在大多数情况下,使用在 CSV 文件中搜索并不是一个好主意,因为grep搜索的是整行而不是您想要搜索的列。

但您可以轻松创建一个简单的 Perl 脚本,它允许您在 CSV 文件中使用 SQL 语句进行搜索。

#! /usr/bin/perl
use DBI;
$dbh = DBI->connect ("dbi:CSV:")
    or die "Cannot connect: $DBI::errstr";
my $sth = $dbh->prepare (shift);
$sth->execute (@ARGV);
$result = $sth->fetchall_arrayref;
$sth->finish;
$dbh->disconnect;
print map { join (',', @$_) . "\n" } @$result;

第一个参数是 SQL 查询,其余参数是查询的参数。例子:

./csv.pl 'select * from example.csv where Ethnicity = ? and Gender = ?' Asian Female

接下来您可以使用以下count方法获取号码:

./csv.pl 'select count(*), Ethnicity, Gender from example.csv where Ethnicity = ? and Gender = ?' Asian Female

相关内容