Utilitário Unix/Linux padrão para testar cada linha de entrada

Utilitário Unix/Linux padrão para testar cada linha de entrada

Estou escrevendo um script Bash que deve testar se cada linha de entrada atende a determinadas condições.

Existe uma maneira de pegar o predicado e reduzir toda a linha para 0 ou 1, para que eu não precise codificar o código de loop sozinho usando um utilitário que é rotineiramente padrão ou prontamente disponível em distribuições Linux?

Responder1

Dados de amostra (queremos todas as linhas que contenham "querer"):

$ cat x
not this
want this
not that
want that

Você poderia usarawk:

  • Imprima um 1se a linha corresponder a regex/want/
  • Imprima um 0se a linha não corresponder
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1

Ou tentesed:

  • Substitua as linhas que contêm apenas 1por 0(caso contrário, elas passarão como a 1)
  • Substitua as linhas que contêm "querer" com um1
  • Substitua as linhas que não são a 1por0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1

informação relacionada