Forma de shell para obter texto específico com base na condição

1

Usando o shell script Estou fazendo uma chamada do banco de dados na VM do banco de dados e estou obtendo e armazenando a resposta da consulta em um arquivo .txt. O que parece abaixo:

X folder Check:
Number of Files on X Outbound
17
Y folder Check:
Number of Files on Y Outbound
17
Z folder Check:
Number of Files on Z Outbound
18

Agora para cada um dos X, Y e Z. Estou basicamente recebendo arquivos (contagens) em seus respectivos locais. Então, eu estou esperando para obter "18" arquivos para cada X, Y e Z. Agora, usando o shell eu quero ser capaz de saber / armazenar as pastas para as quais eu não recebi 18 arquivos.

Exemplo: aqui, no caso acima, eu devo entender que estou com falta de arquivos para as pastas X e Y.

    
por harveySp 30.10.2018 / 07:50

1 resposta

1
sed -n 'N;N;/\n18$/!s/ folder Check:\n.*\n/ /p'

nesse texto seria produzido:

X 17
Y 17
  • -n informa sed para não imprimir o espaço padrão por padrão (apenas imprimimos os que queremos com o sinal p no comando s )
  • N;N : puxamos as duas linhas seguintes para o espaço de padrões, processamos 3 linhas de cada vez em um espaço de padrão de 3 linhas.
  • /\n18/! : se o espaço padrão não ( ! ) terminar ( $ ) em <newline>18
  • s/folder Check:\n.*\n//p : remova a parte entre o nome da pasta e a contagem e p rint. Você também pode reter apenas o nome da pasta ( s/ folder Check:\n.*//p ) ou despejar as três linhas completas ( p ) dependendo do que você quer exatamente.

Mesmo com awk :

awk '{sub(/ folder Check:$/, ""); folder = $0; getline; getline; count = $0}
     count != 18 {print folder, count}'
    
por 30.10.2018 / 08:50