合并两个卸载文件

时间:2012-07-08 05:37:20

标签: sql perl unix informix

我有两个卸载文件,例如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
...       ....         ....
....      ....         ....

此外,我想通过电子邮件发送此邮件。

非常感谢任何想法和帮助。

2 个答案:

答案 0 :(得分:2)

问题中有许多未明确的细节。例如,卸载文件中的列是否由空格,制表符或管道(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电子邮件模块(有很多可供选择)来处理它。

答案 1 :(得分:1)

很难说出问题是什么,除了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

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

我甚至不太确定你的意思“我想通过电子邮件获得这个......”,所以我会把那部分留下来。