Como encontrar uma string de vários arquivos .csv

0

Eu tenho vários arquivos .csv em uma pasta chamada HW na minha área de trabalho e estou usando cygwin, quero encontrar uma string de uma coluna específica, por exemplo, na coluna X ARD é o cabeçalho no valor do conteúdo pode ser verdadeiro ou falso , Quero encontrar a contagem de ARD = true.

Por favor me ajude ...

    
por mamali 05.08.2015 / 13:13

4 respostas

2

Simples, se a palavra-chave estiver sempre na mesma coluna, por ex. coluna número 2

cut -d, -f 2 file(s) | grep -c 'true'

i.e. recorte a coluna 2 (-f 2), usando "," como seperador de campo (-d,), obtenha (grep) todas as dicas e conte-as (-c)

mais complicado, se tivermos que procurar pela coluna "ARD"

awk  'BEGIN {FS = ","}  ; FNR == 1 { for ( i=1 ; i<=NF ; i++ ) { if ( $i=="ARD" ) { col=i } } } ; FNR >= 2 { print $col }' file(s) | grep -c 'true' 

1) BEGIN { FS = "," } antes de cada ação (BEGIN) use vírgula "," como separador de campo ( FS= )

2) para a primeira linha (ou seja, linha de cabeçalho) deste arquivo ( FNR == 1 ) para todas as colunas ( for ( i=1 ; i<=NF ; i++ ) ) verifique se a string "ARD" está nesta coluna ( if ( $i=="ARD") ); se assim for, defina a variável col para o número desta coluna { col=i }

3) Agora que sabemos que o número de nossa coluna imprime a coluna omitindo a primeira linha (= cabeçalho) (ou seja, todas as linhas maiores que 2) deste arquivo FNR >= 2 { print $col } . aqui usamos a variável col como definido anteriormente.

4) canaliza a saída através de grep count ( -c ) as ocorrências de "true"

5) para uma listagem arquivo por arquivo, use um loop for em um bash scrip

    
por 05.08.2015 / 14:03
1

Suponha que você tenha 3 arquivos:

new.csv

Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3

new1.csv :

Col1,Col2,ARD,Col4
1,2,true,3
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3

new2.csv :

Col1,Col2,ARD,Col4
1,2,true,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3
1,2,false,3

Do:

awk -F',' '{print $3}' *.csv | grep -c true

Saída:

6

Suposição:

  1. O ARD está sempre na mesma coluna (coluna 3 no exemplo)

  2. Você deseja grep através de todos os arquivos *.csv nesse diretório

por 05.08.2015 / 14:11
0

Você já pensou em usar awk para dividir a linha e, em seguida,

grep TRUE | wc -l

para contar os resultados?

    
por 05.08.2015 / 13:43
0

Você pode usar o grep recursivamente para todo o conteúdo no diretório por

cd /path/to/dir/*
grep -r "ARD"

ou simplesmente

grep -r -l "ARD" /path/to/dir/*

Fonte para isto: link

Você também pode usar o awk para pesquisar um arquivo csv como

awk -F, '$X == ARD' HW

X representa o número da coluna e ARD significa sua palavra-chave e HW é o seu arquivo csv acima.

Fonte para isso: link

Isso também funcionaria como outra opção

grep '^\([^|]*|\)\{X\}ARD|' HW

Fonte para isso: link

Espero que isso ajude.

    
por 05.08.2015 / 14:01

Tags