Uma maneira mais rápida de pesquisar vários arquivos usando um conjunto de cadeias de dados

0

Como faço para grep um determinado conjunto de números / seqüências de caracteres em um diretório contendo muitos arquivos (cada um dimensionando mais de 1GB). E também quero que seja rápido. Abaixo está meu script, mas é muito lento:

 #!/bin/sh

echo "Report Key|Status|FileName"
SERVICE1="/dir1/dir2/file.csv"
FINDCMD1='"sting1":"'
FINDCMD2='"'
for i in $(cat $SERVICE1);

do
#echo "$i"
FINALFINDCMD=$FINDCMD1$i$FINDCMD2
ORACLEFINALFIND=$ORACLEFINDCMD$i$FINDCMD2
SERVICE2=$(cd /dir1/dir2 && find . -type f -print0 | xargs -n1000 -r0P3 grep $FINALFINDCMD| grep "string2")
if [[ $SERVICE2 = *"string2"* ]]; then
SERVICE3=$(echo $SERVICE2 | cut -c73-115)
        echo "$i|report found|$SERVICE3"
fi
else
    echo "$i|report not found"
fi
  let i++
done 

Suponha que o arquivo .csv tenha os seguintes números:

123456
234567
345678

O script recebe esses relatórios individualmente e os exibe nos arquivos em dir2 (consulte SERVICE2 no código acima). E então imprime se os números / relatórios foram encontrados ou não. Se foram, imprime em qual arquivo o número foi encontrado.

    
por Gaurav Thantry 10.05.2018 / 22:27

2 respostas

2

Usando grep :

grep -f /dir1/dir2/file.csv /dir1/dir2/*

Isso puxará os padrões do seu arquivo .csv e os procurará nos arquivos localizados em /dir1/dir2 . Sugiro não ter seu .csv no mesmo diretório que você deseja pesquisar, caso contrário, será uma correspondência. Se você quiser pesquisar recursivamente em dir2 , adicione o -r flag ao grep.

    
por 10.05.2018 / 22:43
0

Se você quiser grep um padrão em todos os arquivos de um diretório. Você pode fazê-lo com o próprio comando grep.

exemplo:

grep -Hnr "pattern" folderPath

Deixe-me saber se é isso que você está procurando.

    
por 10.05.2018 / 22:39