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

grepgrep대부분의 경우, CSV 파일에서 검색을 사용하는 것은 검색하려는 열 대신 전체 행이 검색되기 때문에 좋은 생각이 아닙니다 .

그러나 SQL 문을 사용하여 CSV 파일 내에서 검색할 수 있는 간단한 Perl 스크립트를 쉽게 만들 수 있습니다.

#! /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

관련 정보