awk:如何打印 env 文件中键的值?

awk:如何打印 env 文件中键的值?

这是我尝试过的(以及其他一些迭代)。文件中的片段

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

它返回APOLLO_KEY而不是文件中每一行的值。我期望并想要获得的价值是

service:abcd

我知道以这种方式解析文件存在相当大的问题。我只是为了一些一次性命令而这样做,此时我对我的 awk 知识/谷歌搜索感到沮丧。

答案1

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

$0 = "APOLLO_KEY"会将字符串分配给$0,比较是==。我认为你不想改变记录这里有分隔符RS,但是场地分隔符FS(您需要使用-F-vFS=在命令行上执行此操作,因此它可以在 awk 分割行之前起作用)。另外,不需要使用显式的如果在这里,我们只是将条件放在整个代码块上。

假设简单的数据(并且绝对不是使用完整 shell 语法的东西!),这应该有效:

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

请注意,如果值包含=符号,则会中断,因为它只采用该行的第二个字段。

如果您需要处理这样的值,一个解决方案是手动删除第一个之前的所有内容=。我们不妨在代码之外传递字段名称,以使其更简洁:

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

答案2

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

输出

service:abcd

相关内容