【问题标题】:Combine two unload files [closed]合并两个卸载文件[关闭]
【发布时间】:2012-07-08 05:37:19
【问题描述】:

我有两个卸载文件,例如 header.unlstore.unlheader.unl 只包含表的列名,而store.unl 包含表的输出信息。

例如:

header.unl --> store_nbr country_code state_code

store.unl  --> 100 US 15

现在我想合并这两个文件,所以我的输出应该如下所示:

store_nbr country_code state_code

100       US           15
...       ....         ....
....      ....         ....

我也想通过电子邮件收到这个。

任何想法和帮助将不胜感激。

【问题讨论】:

  • 你试过什么?对于 store.unl 中的每一行,header.unl 中是否有一行?
  • cat header.unl store.unl 并将其传送到适当的邮件程序?

标签: sql perl unix informix


【解决方案1】:

问题中有许多未指定的细节。例如,卸载文件中的列是否由空格、制表符或管道(Informix UNLOAD 格式默认分隔符)或其他东西分隔?电子邮件是否需要包含对齐的数据?标题和数据之间的空行是故意的吗?您的数据是否会包含分隔符(因为处理转义的分隔符会使重新格式化数据变得非常复杂)。

基本答案是使用cat

{
cat header.unl
echo
cat store.unl
} | mailx -s "Stores Data" whoever@example.com

如果不需要空行,则简化为:

cat header.unl store.unl | mailx -s "Stores Data" whoever@example.com

如果您需要格式化数据以使其在以固定宽度字体显示时看起来很正常,那么您可能需要通过awk 运行它。

接收数据的人将如何处理这些数据?您最好将复合文件格式化为附件而不是内联文本(这是他们从上面的命令收到的)?如果您需要这样做,您可能需要查看 Perl 电子邮件模块(有很多可供选择)来处理它。

【讨论】:

    【解决方案2】:

    很难说问题是什么,除了cat,你还需要什么。我假设您想要用制表符替换空格,但我可能会感到困惑(实际上我更新了这篇文章,因为我的第一个答案完全偏离目标,基于对您格式错误的问题的错误解释)。

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    
    while( <>) { s{ }{\t}g; print ; }
    

    你称之为merge.pl header.unl store.unl

    作为一个班轮:

    perl -p -e's{ }{\t}g' header.unl store.unl
    

    请注意,这是完全未经测试的,因为我不想在这方面付出比你更多的努力来冒犯你。

    我更不明白你说的“我想通过电子邮件收到这个......”是什么意思,所以我将省略这部分。

    【讨论】:

    • 这比paste 好在哪里?无论如何,我认为 OP 想要cat,而不是paste
    • @tripleee 会 paste 重复第一个文件中的行吗?
    • 哦,我明白了,问题的错误格式让我相信标题需要在输出的每一行重复。那么cat确实是要走的路。
    • 不,没错,是有区别的。不过,我认为这不是 OP 想要的。
    • @tripleee 我重写了代码以执行 可能 OP 想要的操作。不过,这将是我最后一次尝试,浪费了足够多的时间。
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2018-02-25
    • 2014-07-18
    • 2014-07-21
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多