需要在unix中创建一个shell脚本或命令,可以执行以下过程(命令将是首选)

时间:2009-09-11 07:56:24

标签: shell dos unix

在以下路径

\\ncsusnasent02.na.jnj.com\its_diq_na_win_dev\PowerCenter\infa_shared\WCPIT_BIO_EDW\SrcFiles\DDDMD\DDD.CLI026.WK0933.DDDMR45.001.head

我有一个文件 DDD.CLI026.WK0933.DDDMR45.001.head

如果我打开这个文件 我得到如下数据(在一行中)

HEADER0101IMS HEALTHDMD Weekly D DD.CLI026.WK0933.DDDMR45 Centocor DMDDRM45 W2009080210120090831125325ssnyder@us.imshealth.com
    TRAIL0101 000000000 581 0000000000CKSUM000002236804730

我们需要从这个文件复制581(它不会每天都更新) 并在以下位置更新

\\ncsusnasent02.na.jnj.com\its_diq_na_win_dev\PowerCenter\infa_shared\WCPIT_BIO_EDW\PrmFiles\LND\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

2 个答案:

答案 0 :(得分:1)

假设标题全部在一行上(并且您添加了“**”以强调要提取的内容),您可以使用以下内容提取数字:

export num=$(expr 0 + $(cat infile | cut -c137-148))

这会提取数字(假设您的文件已正确指定)。表达式“0 + n”将剥离前导零。然后,使用我的另一个问题的代码:

cat parfile | awk -va=${num} '{
    if (substr($0,1,17) == "$$DRM45_RowCount=") {
        print "$$DRM45_RowCount=" a
    } else {
        print
    }
}' > newparfile

现在newparfile应包含您想要的值。

答案 1 :(得分:0)

可能你可以使用Windows脚本解决这个问题(我不是那里的专家),但通常我宁愿安装 CygWin 并写一个 bash / awk / sed 脚本对于这样的操作。这对你和你的情况是否可以接受?