Utilidad estándar de Unix/Linux para probar cada línea de entrada

Utilidad estándar de Unix/Linux para probar cada línea de entrada

Estoy escribiendo un script Bash que debería probar si cada línea de entrada cumple con cierta condición.

¿Hay alguna manera de tomar el predicado y reducir toda la línea a 0 o 1 para no tener que codificar el código de bucle yo mismo usando una utilidad que es habitualmente estándar o está disponible en distribuciones de Linux?

Respuesta1

Datos de muestra (queremos todas las líneas que contengan "desear"):

$ cat x
not this
want this
not that
want that

Podrías usarawk:

  • Imprime un 1si la línea coincide con la expresión regular/want/
  • Imprime un 0si la línea no coincide
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1

O tratarsed:

  • Reemplace las líneas que contienen solo 1con 0(de lo contrario, pasarán como a 1)
  • Reemplace las líneas que contienen "desear" con un1
  • Reemplace las líneas que no sean a 1con a0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1

información relacionada