【问题标题】:need to create a shell script or a command in unix which can do the following process(command will be preferred)需要在 unix 中创建一个 shell 脚本或命令,它可以执行以下过程(命令将是首选)
【发布时间】:2009-09-11 07:56:23
【问题描述】:

在以下路径

\\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 000000000581 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

【问题讨论】:

  • 任何人请回答上述问题

标签: shell dos unix


【解决方案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 应该包含您想要的值。

【讨论】:

  • 我们现在正在从 unix 平台转移到 windows ......你能帮我们在 windows 中实现它......
  • 您需要 Cygwin 或 MinGW - 然后您将获得所需的所有 UNIX 实用程序,它们比标准的 Windows 通用解释器要好得多。
  • 好吧,它超出了范围............我只能将命令从 unix 转换为 cmd
【解决方案2】:

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

【讨论】:

  • 不,我需要在会话级别的名为 informatica 的 etl 工具中添加此脚本............
  • 嗯,我不知道这个etl工具,但是如果你可以运行批处理/命令,你也可以通过cygwin运行shell脚本。这种处理对于 Linux shell 的文本实用程序来说是微不足道的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多