Lendo várias entradas de um arquivo .txt

0

Eu quero usar a lista de números de telefone (muitos) em um arquivo "input_loan_msisdn.txt" como entrada para o meu script (os números de telefone no arquivo são listados linha por linha) e usá-lo como uma palavra-chave para grep minha saída de outro arquivo yemmy_snap *

Um arquivo de entrada de amostra:

2348093700000 
2348180000000 
2348090000000 
2348097000000
2347050000000 
2348090000000 
2348170000000 

Veja minha tentativa abaixo:

#!/bin/bash

for msisdn in $(cat input_loan_msisdn.txt); do
    cd /onip/cdr/output/snapshot/yemmy/backup
    zgrep $msisdn yemmy_snap* | \
    awk -F "|" '{print $1 "   " $14 "   " $4 }' ocs_snapshot*.unl \
         > /onip/app/cbpapp/RETURN_LOAN/output_loan_msisdn.txt;
done
    
por yemmy 06.10.2016 / 17:45

1 resposta

0

O loop while é desnecessário, pois grep tem a opção -f :

 grep -f input_loan_msisdn.txt yemmy_snap* | <do other stuff with the data>

Note que se o arquivo passado para -f tem qualquer linha em branco, grep corresponde a todas as linhas, (age como cat ). Supondo que o arquivo passado para -f não possa ser editado antecipadamente, ele pode ser corrigido em tempo de execução da seguinte forma:

grep '.' input_loan_msisdn.txt | \
grep -f - yemmy_snap* | <do other stuff with the data>

De man grep :

-f FILE, --file=FILE
      Obtain patterns from FILE, one per line.  If this option is used
      multiple times or is combined with  the  -e  (--regexp)  option,
      search  for  all  patterns  given.  The empty file contains zero
      patterns, and therefore matches nothing.
    
por 07.10.2016 / 04:33