awk: como imprimo o valor de uma chave em um arquivo env?

awk: como imprimo o valor de uma chave em um arquivo env?

foi isso que tentei (e algumas outras iterações). trecho do arquivo

APOLLO_KEY=service:abcd
cat packages/graph/.env | gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'

ele retorna APOLLO_KEYem vez do valor de cada linha do arquivo. o valor que eu esperaria e gostaria de obter é

service:abcd

Entendo que há problemas consideráveis ​​ao analisar o arquivo dessa maneira. Estou apenas fazendo isso para alguns comandos únicos e, neste momento, estou frustrado com meu conhecimento/pesquisando no Google.

Responder1

gawk '{ if ($0 = "APOLLO_KEY" ) { RS = "=" } ; { print $1 } }'

$0 = "APOLLO_KEY"atribuiria a string a $0, a comparação é ==. Eu não acho que você queira mudar oregistroseparador RSaqui, mas ocamposeparador FS(e você precisa fazer isso com -Fou -vFS=na linha de comando, para que funcione antes que o awk divida a linha). Além disso, não há necessidade de usar um explícitosedeclaração aqui, apenas colocamos a condição em todo o bloco de código.

Supondo dados simplistas (e definitivamente não algo que use a sintaxe completa do shell!), Isso deve funcionar:

awk -F= '$1 == "APOLLO_KEY" { print $2 }'

Observe que isso é interrompido se o valor contiver =sinais, pois ocupa apenas o segundo campo da linha.

Se você precisar lidar com valores como esse, uma solução seria remover manualmente tudo até o primeiro arquivo =. Poderíamos também passar o nome do campo fora do código para torná-lo um pouco mais limpo:

awk -v key=APOLLO_KEY -F= '$1 == key { sub(/^[^=]+=/, ""); print }'

Responder2

awk -F "=" '{for(i=1;i<=NF;i++){if($i ~ /APOLLO_KEY/)print $(i+1)}}' filename

saída

service:abcd

informação relacionada