我是 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