通过 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 每个领域都只是为了美化一下。
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 每个领域都只是为了美化一下。