我需要一个UNIX脚本来满足以下要求。
输入文件:file1.dat.$prevday
,file2.dat.$today
要求:
1)脚本的输入字段应为file1_today
,file2_prevday
2)脚本应该比较两个文件并给出两个输出文件中的行列表
To_be_added.txt
,to_be_removed.txt
3)To be added.txt
- 这应该包含 file1_today但不在file2_prevday 中可用的行列表。
4)To be removed.txt
- 这应该包含在file2_prevday中可用但不在file1_today 中的列表行。
答案 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
我会将另一个文件的创建留给您。
有些问题可能会让你自己回答:
date
命令和反引号生成文件名?