需要创建一个外壳脚本或在UNIX命令,其可以执行以下处理(命令将是优选的)(need to crea

2019-07-17 17:28发布

在以下路径

\\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周刊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

我们需要更新对581 $$ DRM45_RowCount

Answer 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应该包含您需要的值。



Answer 2:

也许你可以解决这个使用Windows脚本(我不是专家在这),但通常我宁愿安装Cygwin并写了一个bash / awk的/ sed脚本进行这样的操作。 这是为你和你的情况是否可以接受?



文章来源: need to create a shell script or a command in unix which can do the following process(command will be preferred)
标签: shell dos unix