shell脚本正在分析控制表以获取正确的参数以进行处理。
目前,它很简单 - 使用grep,它指向正确的行,awk {print $ n}确定正确的列。
列仅由空格分隔。没有特殊规则,只是由空格分隔的值。
一切都很好,工作正常,用户喜欢它
只要没有列留空。对于最后一个列,可以将其留空,但如果某人没有在中间填充一列,则会混淆awk {print $ n}逻辑。
当然,可以作为用户填写每个条目,或者可以将列分隔符定义为“;” 。
如果跳过某些内容,可以使用“;;”但是,我宁愿不更改表格样式
所以问题是:
如何有效地分析具有colum值空白的表?表是这样的:
ApplikationService ServerName PortNumber ControlValue_1 ControlValue_2 Read chavez.com 3599 john doe Write 3345 johnny walker Update curiosity.org jerry
可能会有什么帮助: 如果列中设置了值,则在其列标题描述下(更不精确)。
干杯,
拉茶
答案 0 :(得分:2)
你不能说出你想要的输出是什么,但这显示了你正确的方法:
$ cat tst.awk
NR==1 {
print
while ( match($0,/[^[:space:]]+[[:space:]]*/) ) {
width[++i] = RLENGTH
$0 = substr($0,RSTART+RLENGTH)
}
next
}
{
i = 0
while ( (fld = substr($0,1,width[++i])) != "" ) {
gsub(/^ +| +$/,"",fld)
printf "%-*s", width[i], (fld == "" ? "[empty]" : fld)
$0 = substr($0,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]"替换空字段。并且左对齐每个字段只是为了相当一点。