for r in 'grep -n '^0010\|^0012\|^0070' CUSTOMER_FILE | grep -C1 '[0-9]\+:0012|149 196 222|' | grep -o '^[0-9]\+' | paste -d, - - - | sed 's/,[0-9]\+,/,/g''; do sed -n "$r"p CUSTOMER_FILE; echo; done
149 196 222
no comando acima é o número de telefone do cliente. Altere-o para o número de telefone que você deseja descobrir.
CUSTOMER_FILE
é o arquivo que você deseja pesquisar. Mude para o seu nome de arquivo.
Você também pode colocar o código em um script básico e substituir 149 196 222
por $1
e substituir CUSTOMER_FILE
por $2
. Diga find-customer.sh, então você pode executar o script como este
./find-customer.sh '149 196 222' your-file-name
Pré-requisito deste trecho de código:
- Bash, ambiente GNU (GNU grep, GNU sed)
- Seu arquivo deve seguir o formato abaixo
%código%
UPDATE
Esta é uma versão de alto desempenho. (Pelo menos, maior do que o original acima. Não for-loop envolvido em tudo.)
grep -n '^0010\|^0012\|^0070' CUSTOMER_FILE | grep -C1 '[0-9]\+:0012|149 196 222|' | grep -o '^[0-9]\+' | paste -d, - - - | sed -r 's|([0-9]+),[0-9]+,([0-9]+)|,p;a|g' | sed -n -f - CUSTOMER_FILE
UPDATE para AIX
Como o consulente está trabalhando no AIX. O grep no AIX não suporta opções de contexto, -A, -B, -C.
Na Internet, há uma variedade de implementações "cgrep" (context grep) para resolver este problema (para simular a opção de contexto grep do GNU). Mas a maioria deles não pode dar a mesma saída que o GNU grep. Apenas um que eu encontrei é o mais próximo da opção de contexto do GNU grep. O link é link
Eu fiz algumas modificações necessárias para este caso.
#!/bin/bash
BEFORE=$1
AFTER=$1
FILE=/tmp/.cattmp
PATTERN="$2"
cat > $FILE
for i in $(grep -n "$PATTERN" $FILE | sed -e 's/\:.*//')
do head -n $(($AFTER+$i)) $FILE | tail -n $(($AFTER+$BEFORE+1))
done
rm $FILE
Salve este arquivo como
0010 ...
<no 0010 or 0012 or 0070> ...
0012 ...
<no 0010 or 0012 or 0070> ...
0070 ...
<repeated content as above or end of file>
e substitua grep-context.sh
por grep -C1
no comando acima.
Outra maneira que eu acho que é de uma vez por todas é compilar o GNU grep no AIX. (também compilar o GNU sed apenas no caso)