
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_KEY
em 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 RS
aqui, mas ocamposeparador FS
(e você precisa fazer isso com -F
ou -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