grep padrão de pesquisa do arquivo contendo lista de padrões, gravação do resultado de cada padrão em arquivos individuais

1

Eu tenho um diretório contendo cds diários para o mês. Eu preciso pesquisar todos os cds para obter uma lista de números ph e gravar o resultado em arquivos individuais para cada padrão.

Atualmente estou usando o comando abaixo manualmente para cada número ph no diretório contendo cds mensais e escrevendo o resultado de cada número para um arquivo individual.

grep -rn 111222333 /dir-containing-new-indivdual-logs/111222333.csv

Eu tentei adicionar a opção grep -f para especificar a lista de pesquisa, mas sem sorte, pois a minha sintaxe para o comando inteiro está errada.

    
por mudgee.garry 12.10.2017 / 04:29

2 respostas

0

Se você preferir ficar com o grep, considere este loop

nums=/path/to/the/file_with_numbers_one_per_line
wdir=/path/to/dir/where/records2searchIn/located
rdir=/path/to/dir/to/put/results

for anum in $(cat ${nums}); do
 grep -nr "${anum}" ${wdir} > ${rdir}/result_file_for_${anum}; 
done

que faz grep para cada número na lista e salva resultados individuais

    
por 12.10.2017 / 13:22
0

Use awk para isso.

awk 'NR==FNR{ptrns[$0]++;next} 
    FILENAME!="ptrns_list"{for(x in ptrns) if($0 ~ x) print $0>x}' ptrns_list infiles*.csv

Primeiro, leia todos os padrões para uma matriz de onde eles estão no arquivo ptrns_list . Em seguida, para cada arquivo .csv, se na linha inteira $0 um desses padrões tiver visto $0 ~ x , imprima a linha em um arquivo individual com o mesmo nome do padrão correspondente.

Basta passar seu arquivo de lista de padrões de pesquisa real com ptrns_list e inserir Arquivos .csv com infiles*.csv em ptrns_list infiles*.csv .

    
por 12.10.2017 / 05:15