使用unix脚本

时间:2016-07-11 07:09:25

标签: shell unix sh

我需要一个UNIX脚本来满足以下要求。

输入文件:file1.dat.$prevdayfile2.dat.$today

要求:

1)脚本的输入字段应为file1_todayfile2_prevday

2)脚本应该比较两个文件并给出两个输出文件中的行列表 To_be_added.txtto_be_removed.txt

3)To be added.txt - 这应该包含 file1_today但不在file2_prevday 中可用的行列表。

4)To be removed.txt - 这应该包含在file2_prevday中可用但不在file1_today 中的列表行。

1 个答案:

答案 0 :(得分:0)

我将向您展示如何使用一些简单的命令构建至少一半所需的东西(教一个人捕鱼,以及所有......)

您可以使用perl或ruby等脚本语言来完成此操作。如果您曾经想要学习其中一种语言,那么这样的计划将是一个绝佳的机会。

您也可以通过将命令链接在一起来完成此操作。

首先,unix命令&#39;差异&#39;为您提供所需的信息,而不是您想要的格式。如果您将文件2 ^ prevday文件_今天&#39;那么它将显示仅存在于file1_today中的行与&#39;&gt; &#39;在前面(你的&#39; To_be_added.txt&#39;,那些只在file2_prevday&#39;在&#39;&lt;&#;;在前面。我建议现在尝试使用一些示例文件。< / p>

现在我们可以只搜索那些带有grep的行,这些行只搜索匹配的行,例如:

% diff file2_prevday file1_today | grep '^> '

在这里,我们搜索与模式匹配的行&#39; ^&gt; &#39 ;. &#39; ^&#39;是grep(和类似工具)的特殊字符,匹配行的开头。

不幸的是,这离开了&#39;&gt; &#39;在我们所有输出的开头。

我们可以使用sed修改通过管道的线路,这样我们就可以进行搜索和替换。我们搜索相同的模式并与之匹配:

% diff file2_prevday file1_today | grep '^> ' | sed -e 's/^> //'

这为我们提供了一个文件的输出,我们可以保存:

% diff file2_prevday file1_today | grep '^> ' | sed -e 's/^> //' > To_be_added.txt

我会将另一个文件的创建留给您。

有些问题可能会让你自己回答:

  1. 为什么我们需要&#39; ^&#39;在grep和sed?
  2. 我怎样才能创建一个可以运行这两个命令的别名?
  3. 我怎么能用像这样的语言把它写成一个脚本 的Perl /红宝石/蟒?
  4. 如何使用date命令和反引号生成文件名?