我有这个 awk 语句,它读取一个 YAML 文件并输出一个特定的值。我需要在一个循环中循环这个 awk,我从一个值列表中读取一个键值并将该键传递给 awk。
YAML 文件具有以下结构:
abc:
NAME: Bob
OCCUPATION: Technician
def:
NAME: Jane
OCCUPATION: Engineer
Run Code Online (Sandbox Code Playgroud)
说我想关键abc
OCCUPATION
的价值TECHNICIAN
,通过谷歌搜索我设法建立一个awk语句,让我想要什么
> awk 'BEGIN{OFS=""} /^[^ ]/{ f=/^abc:/; next } f{ if (sub(/:$/,"")) abc=$2; else print abc,$1 $2}' test.yml| grep "OCCUPATION:" | cut -d':' -f2
Technician
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用这个循环,将 -v 选项传递给 awk 似乎没有任何意义:
items="abc,def"
for item in $(echo $items | sed "s/,/ /g");
do
echo $item;
awk -v name="$item" 'BEGIN{OFS=""} /^[^ ]/{ f=/^\name:/; next } f{ if (sub(/:$/,"")) name=$2; …
Run Code Online (Sandbox Code Playgroud)