Unix循环读取平面文件和更新语句

时间:2016-04-13 21:23:10

标签: shell unix for-loop while-loop scripting

我一直在创建一个循环,它将读取平面文件,并将值插入到预先生成的emcli语句中。平面文件包含47个目标的target_nametarget_type,以空格分隔。我尝试为每个目标更新的emcli命令是:

emcli set_target_property_value -subseparator=property_records="@@" -property_records="target_name@@target_type@@Department@@dept_name"

我无法启动循环,因为我不知道如何通过文件读取它并将值更新到语句中。我没有太多的脚本编写经验。

1 个答案:

答案 0 :(得分:1)

注意:解决方案基于以下假设。

根据您的评论,平面文件只有target_name target_type,如下所示。

平面文件a.txt

host1 hosts
host2 j2ee_application
host3 metatdata_repository
host4 EM
host5 Console
host6 Service
host7 oracle_oms_pbs
host8 weblogic_j2eeserver

Shell脚本:

然后,脚本只需要在遍历每一行时读取第一个和第二个字段,并使用emclitarget_name更新target_type命令。

/\语句中出现的"添加了

echo,以便正确打印整个命令/语句。

grep -v ^$忽略任何空行。

cat a.txt |grep -v ^$ |
    while read target_name target_type
    do
        echo  "emcli set_target_property_value -subseparator=property_records=\"@@\" -property_records=\"${target_name}@@${target_type}@@Department@@dept_name\""
    done

<强>结果:

emcli set_target_property_value -subseparator=property_records="@@" -property_records="host1@@hosts@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host2@@j2ee_application@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host3@@metatdata_repository@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host4@@EM@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host5@@Console@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host6@@Service@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host7@@oracle_oms_pbs@@Department@@dept_name"
emcli set_target_property_value -subseparator=property_records="@@" -property_records="host8@@weblogic_j2eeserver@@Department@@dept_name"