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

相關內容