Eu tenho um arquivo de log, cuja formatação é muito consistente e que eu controlo. Ele produz campos delimitados por canal de comprimento constante.
Dois campos são relevantes para o processo de filtragem que desejo criar, chamando-o de primário e secundário.
Usando o Grep, posso filtrar primeiro no primário. Isso produzirá uma lista incompleta de linhas relevantes. Nesta lista irá mostrar várias linhas, e estas terão um dos dois valores distintos no campo secundário. Também haverá outras linhas que não correspondem ao campo principal, mas cujo campo principal está em branco, que corresponde a um ou a outro dos valores do campo secundário. Todas essas linhas são relevantes. E eu os quero na saída final, mas eu não os conheço até ter passado pelo passe inicial.
Todas as entradas em que o campo secundário corresponde terão o campo primário inicial ou um campo primário em branco. Em nenhum caso, um campo secundário ficará em branco.
Minha estratégia é
1. awk o arquivo de log uma vez, retirando todas as linhas onde o campo primário corresponde (esta será a entrada para o script). Para cada linha, examine o campo secundário até que ambos os valores de campo secundários correspondentes sejam encontrados.
2. awk o logfile novamente, retirando todas as linhas onde o campo primário corresponde ou o campo secundário corresponde a um dos dois valores aprendidos na primeira passagem.
Como posso armazenar os dois valores de campos secundários aprendidos no passe 1 e usá-los ao escrever as condições para o passo 2?
Pediram-me para fornecer amostras, por isso aqui está uma versão simplificada dos dados que ilustram os pontos importantes. "Primário" é o campo 2 e "Secundário" é o campo 3.
Este é o primeiro pull (o valor de entrada é 05478900172)
2015-03-10 09:13:40,598|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,617|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,617|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,626|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,626|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:14:16,686|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,695|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,705|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,705|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,714|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,714|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:23,838|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,878|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,878|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S| 0
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,888|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,888|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:15:01,915|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,936|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,936|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,945|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,946|05478900172|4792761 | 17|s|D|S|----
A partir disso, podemos ver que o campo secundário ($ 3) contém dois valores possíveis para este campo primário (4792761 ou 4792964).
Queremos que o nosso script extraia o seguinte conjunto de dados, que contém todos os registros com
05478900172 em $ 2 e (4792761 ou 4792964) em $ 3. Eu não sei esses dois valores até que eu tenha feito a varredura inicial, então eu preciso passar esses valores como variáveis que de alguma forma são compartilhadas entre a primeira e a segunda passagem.
2015-03-10 09:13:40,598|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,601|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,608| null|4792761 |---|-|K|-|----
2015-03-10 09:13:40,608| null|4792761 |---|-|K|-|----
2015-03-10 09:13:40,617| null|4792761 |---|r|D|S|----
2015-03-10 09:13:40,617|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,617|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,626|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:13:40,626|05478900172|4792761 | 15|s|D|S|----
2015-03-10 09:14:16,686|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,694|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,695|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,696| null|4792964 |---|-|K|-|----
2015-03-10 09:14:16,696| null|4792964 |---|-|K|-|----
2015-03-10 09:14:16,704| null|4792964 |---|r|D|S|----
2015-03-10 09:14:16,705|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,705|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,714|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,714|05478900172|4792964 | 41|s|D|S|----
2015-03-10 09:14:16,760| null|4792964 |---|r|D|S|----
2015-03-10 09:14:16,760| null|4792964 |---|r|D|S|----
2015-03-10 09:14:23,817| null|4792964 | 42|-|D|S|----
2015-03-10 09:14:23,817| null|4792964 | 42|-|D|S|----
2015-03-10 09:14:23,817| null|4792964 | 42|-|D|S|7057
2015-03-10 09:14:23,817| null|4792964 | 42|-|D|S|----
2015-03-10 09:14:23,818| null|4792964 | 42|-|D|S|----
2015-03-10 09:14:23,818| null|4792964 | 42|-|D|S|----
2015-03-10 09:14:23,838|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,876| null|4792964 |---|-|K|-|----
2015-03-10 09:14:23,876| null|4792964 |---|-|K|-|----
2015-03-10 09:14:23,878|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,878|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,878| null|4792964 |---|r|D|S|----
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,879| null|4792964 |---|r|D|S|----
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S| 0
2015-03-10 09:14:23,879|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,888|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:14:23,888|05478900172|4792964 | 43|s|D|S|----
2015-03-10 09:15:01,915|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,917|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,925| null|4792761 |---|-|K|-|----
2015-03-10 09:15:01,925| null|4792761 |---|-|K|-|----
2015-03-10 09:15:01,936| null|4792761 |---|r|D|S|----
2015-03-10 09:15:01,936|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,936|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,945|05478900172|4792761 | 17|s|D|S|----
2015-03-10 09:15:01,946|05478900172|4792761 | 17|s|D|S|----