Shell 如何使用awk获取键值对?

Shell 如何使用awk获取键值对?,shell,awk,Shell,Awk,我有以下值的txt文件 f:0 c:Test C s:test S ctype:0 a:test A t:10 r:test r f:0 c:Test C1 s:test S1 ctype:1 a:test A1 t:10 r:test r f:20 c:Test C s:test S ctype:2 a:test A1 t:0 r:test r 我已经尝试了以下代码,但它没有给出正确的输出,因为所有的单换行值都是键值对,循环双换行: awk ' BEGIN { FS="\

我有以下值的txt文件

f:0
c:Test C
s:test S
ctype:0
a:test A
t:10
r:test r

f:0
c:Test C1
s:test S1
ctype:1
a:test A1
t:10
r:test r

f:20
c:Test C
s:test S
ctype:2
a:test A1
t:0
r:test r
我已经尝试了以下代码,但它没有给出正确的输出,因为所有的单换行值都是键值对,循环双换行:

awk '
    BEGIN {
    FS="\n"
    RS=""
}
{
    print $1 "\n " $2 "\n" $3
}
除了awk,你什么都可以用

编辑:

输出如下所示:


我想循环数据并执行一项操作。

我不确定我是否完全理解您的问题,但这是否接近您的想法:

{
    if ( /^a:/ ) a = substr($0, 3)
    if ( /^c:/ ) c = substr($0, 3)
    if ( /^ctype:/ ) ctype = substr($0, 7)
    if ( /^$/ ) {
        if ( ctype == "0" ) {
            print "a: [", a, "]"
        } else {
            print "c: [", c, "]"
        }
    }
}
END {
    if ( ctype == "0" ) {
        print "a: [", a, "]"
    } else {
        print "c: [", c, "]"
    }
}

这将读取每个测试块,搜索a、c和ctype的值,然后根据ctype的值打印a或c的值。这就是你问题中经过编辑的部分似乎表明你想要实现的目标;如果没有,希望它至少能为您指明正确的方向。

awk-F:'NF{print$1,$2}'文件
预期的输出是什么?向我们展示一个不做您想做的事情的命令,并告诉我们它不做您想做的事情,对于告诉我们您想做的事情并没有多大帮助!如果您在这个问题上需要帮助,那么您应该澄清您的问题。
RS=“\n\n”
FS=“\n”
可能吗???预期的输出不清楚
{
    if ( /^a:/ ) a = substr($0, 3)
    if ( /^c:/ ) c = substr($0, 3)
    if ( /^ctype:/ ) ctype = substr($0, 7)
    if ( /^$/ ) {
        if ( ctype == "0" ) {
            print "a: [", a, "]"
        } else {
            print "c: [", c, "]"
        }
    }
}
END {
    if ( ctype == "0" ) {
        print "a: [", a, "]"
    } else {
        print "c: [", c, "]"
    }
}