【发布时间】:2015-06-16 15:54:36
【问题描述】:
已编辑 - TLDR:使用 awk 解析包含逗号的字段。
# 原始配置文件 - confile1$ cat confile1
list=(
app1,"HOSTNAME - port - application name - alert1",99.0,99.0
app2,"HOSTNAME - port - application name - alert1",99.0,99.0
app3,"HOSTNAME - port - service name - alert2",99.0,99.0
web1,"URL - HOSTNAMES(01,02) - http://someurl.com/ - alert1",99.0,99.0
)
# 原始脚本 - test1
$ cat test1
#!/bin/bash
IFS="$(printf '\n\t')"
function parse
{
for item in ${list[*]}
do
group=$(echo $item | awk -F, '{print $1}')
monitor=$(echo $item | awk -F, '{print $2}')
grp_sla=$(echo $item | awk -F, '{print $3}')
mon_sla=$(echo $item | awk -F, '{print $4}')
echo $group
echo $monitor
echo $grp_sla
echo $mon_sla
done
}
. confile1
parse
请注意,conffile1 的最后一行被删除了,因为它在第二个字段中有一个逗号
$ ./test1
app1
HOSTNAME - port - application name - alert1
99.0
99.0
app2
HOSTNAME - port - application name - alert1
99.0
99.0
app3
HOSTNAME - port - service name - alert2
99.0
99.0
web1
URL - HOSTNAMES(01
02) - http://someurl.com/ - alert1
99.0
【问题讨论】:
-
你的问题太长了,大多数人都不愿意花时间阅读和理解它,以便他们可以帮助你。摆脱所有绒毛(
my office uses HP Sitescope..= 不相关的细节)并将其剥离为基础知识 - 简要描述、示例输入、预期输出以及您尝试过的内容。正确的解决方案除了调用awk外不涉及任何shell 命令。 UNIX shell 是一个环境,从中可以使用一种语言调用工具来对这些调用进行排序,而用于操作文本的 UNIX 工具是 awk,因此无论您尝试做什么,都只是一个 awk 脚本