通过 Shell 脚本分析控件 table

Analyze a control table by Shell Script

shell 脚本正在分析控件 table 以获取用于其处理的正确参数。 目前,它很简单——使用 grep,它指向正确的行,awk {print $n} 确定正确的列。
列仅由 space 分隔。没有特殊规则,只是用 space 分隔的值。 一切正常,用户喜欢。
只要 none 列留空即可。对于最后一列,将其留空是可以的,但是如果有人不填写中间的一列,则会混淆 awk {print $n} 逻辑。 当然,可以作为用户填写每一项,也可以只定义列分隔符为“;”。 . 如果跳过某些内容,可以使用“;;”但是,我不想更改 table 样式。
所以问题是:
如何有效地分析 table 列值中有空白? Table 是这样的:

ApplikationService    ServerName    PortNumber     ControlValue_1    ControlValue_2    
Read                  chavez.com       3599         john                 doe    
Write                                  3345         johnny               walker    
Update                curiosity.org                 jerry                 

可能有什么帮助: 如果在列中设置了一个值,则它(更精确)在其列 header 描述下。

干杯,
塔里克

你没有说出你想要的输出是什么,但这向你展示了正确的方法:

$ cat tst.awk
NR==1 {
    print
    while ( match([=10=],/[^[:space:]]+[[:space:]]*/) ) {
        width[++i] = RLENGTH
        [=10=] = substr([=10=],RSTART+RLENGTH)
    }
    next
}
{
    i = 0
    while ( (fld = substr([=10=],1,width[++i])) != "" ) {
        gsub(/^ +| +$/,"",fld)
        printf "%-*s", width[i], (fld == "" ? "[empty]" : fld)
        [=10=] = substr([=10=],width[i]+1)
    }
    print ""
}
$
$ awk -f tst.awk file
ApplikationService    ServerName    PortNumber     ControlValue_1    ControlValue_2
Read                  chavez.com    3599           john              doe
Write                 [empty]       3345           johnny            walker
Update                curiosity.org [empty]        jerry             [empty]

它使用标题行中每个字段的宽度来确定文件每一行中每个字段的宽度,然后用字符串“[empty]”和left-aligns 每个领域都只是为了美化一下。