![awk: ¿cómo imprimo el valor de una clave en un archivo env?](https://rvso.com/image/178485/awk%3A%20%C2%BFc%C3%B3mo%20imprimo%20el%20valor%20de%20una%20clave%20en%20un%20archivo%20env%3F.png)
esto es lo que probé (y algunas otras iteraciones). fragmento de archivo
APOLLO_KEY=service:abcd
cat packages/graph/.env | gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'
devuelve APOLLO_KEY
en lugar del valor de cada fila del archivo. el valor que esperaría y desearía obtener es
service:abcd
Entiendo que existen problemas considerables al analizar el archivo de esta manera. Solo lo estoy haciendo para algunos comandos únicos, y en este punto estoy frustrado con mi conocimiento extraño/buscar en Google.
Respuesta1
gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'
$0 = "APOLLO_KEY"
asignaría la cadena a $0
, la comparación es ==
. No creo que quieras cambiar elregistroseparador RS
aquí, pero elcamposeparador FS
(y debe hacerlo con -F
o -vFS=
en la línea de comando, para que funcione antes de que awk divida la línea). Además, no es necesario utilizar un explícitosideclaración aquí, simplemente ponemos la condición en todo el bloque de código.
Suponiendo datos simplistas (¡y definitivamente no algo que use la sintaxis completa del shell!), esto debería funcionar:
awk -F= '$1 == "APOLLO_KEY" { print $2 }'
Tenga en cuenta que esto se rompe si el valor contiene =
signos, ya que solo toma el segundo campo de la línea.
Si necesita lidiar con valores como ese, una solución sería eliminar manualmente todo hasta el primero =
. También podríamos pasar el nombre del campo fuera del código para hacerlo un poco más limpio:
awk -v key=APOLLO_KEY -F= '$1 == key { sub(/^[^=]+=/, ""); print }'
Respuesta2
awk -F "=" '{for(i=1;i<=NF;i++){if($i ~ /APOLLO_KEY/)print $(i+1)}}' filename
producción
service:abcd