需要在unix中实现以下内容

时间:2009-09-14 05:30:35

标签: unix shell

有一个变量 var = 581 我们需要在以下地址(位置)复制此变量的值 和值应出现在 $$ DRM45_RowCount

之前

\ ncsusnasent02.na.jnj.com \ its_diq_na_win_dev \的PowerCenter \ infa_shared \ WCPIT_BIO_EDW \ PrmFiles \ LND \ IMS_FILE_to_LND.par

当我打开此文件IMS_FILE_to_LND.par时,它的数据如下

[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=581
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149

我们需要针对$$ DRM45_RowCount更新581

1 个答案:

答案 0 :(得分:2)

如果您只想替换$$DRM45_RowCount的值,可以按以下方式使用awk

awk -va=99 '{
    if (substr($0,1,17) == "$$DRM45_RowCount=") {
        print "$$DRM45_RowCount=" a
    } else {
        print
    }
}'

-va=99控件将替换当前值(在这种情况下,它会将其更改为99)。

以下测试命令:

echo '[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=581
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149' | awk -va=99 '{
    if (substr($0,1,17) == "$$DRM45_RowCount=") {
        print "$$DRM45_RowCount=" a
    } else {
        print
    }
}'

输出:

[WCPIT_BIO_EDW.WF:w_DDDMD_LNDG_IMS_NONRET_SALES]
$$Cust_RowCount=72648
$$Sales_RowCount=5235998
$$OuletChangeLog_RowCount=931
$$DRM45_RowCount=99
$$Control_RowCount=4495
$$Outl_Subcat_RowCount=105
$$Fac_Subcat_RowCount=149

或者,您可以使用sed

sed 's/^$$DRM45_RowCount=.*$/$$DRM45_RowCount=99/'

或:

export a=99
sed "s/^\$\$DRM45_RowCount=.*$/\$\$DRM45_RowCount=$a/"