Shell 从bash脚本中的一行中获取单独的k、v字段

Shell 从bash脚本中的一行中获取单独的k、v字段,shell,command-line,awk,grep,Shell,Command Line,Awk,Grep,我阅读了以下表格中的一行数据: KEYNAME:value,KEYNAME:value,KEYNAME:value (请注意,键是不带空格的字符串,值是整数) 我需要选择一些特定的键(不知道它们的相对位置),并在单独的行上打印它们的值: value value value 到目前为止,我做了一些事情,比如将输入行转换为多个键:值行,将我想要的键变灰,施加一个已知的顺序,最后再次通过剪切来移除关键部分: sed 's/,/\n/g' | egrep '(FooKey|BarKey|BazKey

我阅读了以下表格中的一行数据:

KEYNAME:value,KEYNAME:value,KEYNAME:value
(请注意,键是不带空格的字符串,值是整数)

我需要选择一些特定的键(不知道它们的相对位置),并在单独的行上打印它们的值:

value
value
value
到目前为止,我做了一些事情,比如将输入行转换为多个键:值行,将我想要的键变灰,施加一个已知的顺序,最后再次通过剪切来移除关键部分:

sed 's/,/\n/g' | egrep '(FooKey|BarKey|BazKey)' | sort | cut -d':' -f2
我想我可以用awk安排一些事情,我只知道一些基本知识,但我只能按字段的位置顺序管理字段,而不能按字段的名称(键名)管理字段


可以用其他语言(例如Python或Perl)来完成,但我把它作为一个练习,用常用的shell工具来完成所有事情。此外,与加载python或perl等更大的解释器相比,我仍然更喜欢上述解决方案。

这将只打印值:

awk 'BEGIN { RS=","; FS=":" } { print $2 }'
如果希望值按特定顺序排列,可以将其放入数组中:

awk '
    BEGIN { RS=","; FS=":" }
    { values[$1] = $2 }
    END {
        print values["FooKey"];
        print values["BarKey"];
    }'

您可能需要:
awk-F:-v RS=,'$1==“FooKey”| |$1==“BarKey”| |$1==“BazKey”{print$2}'
是的,这是一个$2,使其打印值而不是键,但此解决方案无法维持输出的给定顺序(即使更改/FooKey | BarKey | BazKey/输出顺序仍然遵循输入中字段的顺序).我知道awk或其他什么东西能处理好这件事。感谢您提供的解决方案:)
awk 'BEGIN { FS=":"; RS = ","; } /FooKey|BarKey|BazKey/ { print $1 }'