2

在以下路径

\\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 0000000000CKSUM00000233

我们需要从这个文件中复制 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

4

2 回答 2

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

于 2009-09-14T06:28:37.783 回答
0

可能您可以使用 Windows 脚本来解决这个问题(我不是这方面的专家),但通常我宁愿安装CygWin并为此类操作编写一个bash/awk/sed脚本。这对您和您的情况是否可以接受?

于 2009-09-11T08:04:34.167 回答