-4

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

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

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

4

2 回答 2

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 电子邮件模块(有很多可供选择)来处理它。

于 2012-07-08T20:20:08.930 回答
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

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

我更不确定您所说的“我想在电子邮件中收到这个......”是什么意思,所以我将把这部分省略掉。

于 2012-07-08T06:48:57.207 回答