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
1
se a linha corresponder a regex/want/
- Imprima um
0
se 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
1
por0
(caso contrário, elas passarão como a1
) - Substitua as linhas que contêm "querer" com um
1
- Substitua as linhas que não são a
1
por0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1