【发布时间】:2017-08-18 16:26:22
【问题描述】:
我有一个文件,如下所示;
ENV_ab 1.1.11.0
ENV_bb 1.1.11.0
ENV_cc 1.1.11.0
ENV_dd 1.1.11.0
ENV_ff 1.1.11.0
ENV_gg 1.1.11.0
ENV1_ab 1.1.11.0
ENV1_bb 1.1.10.0
ENV1_cc 1.1.11.0
ENV1_dd 1.1.11.0
ENV1_ff 1.1.11.0
ENV1_gg 1.1.11.0
- 可以看出,每个 ENV 有 6 个版本号。 - 我想要做的是比较每个环境的 6 个版本号。 - 所以,ENV_(ab,bb,cc..etc) 有 6 个版本(1.1.11.0),我希望能够将 ENV_AB,bb,cc,dd,ff,gg 相互比较,如果它们都是同样只打印一个 ENV 及其版本。如果它们不一样,则打印出不一样的部分并打印一次具有相同版本的 env。
如果文件的所有环境都相同,则上述预期输出;
ENV_ab 1.1.11.0
ENV1_ab 1.1.11.0
但是,如果在其中一个 env 中有一个 diffrenet 版本(因此将 ENV_bb 版本更改为 1.1.10.0),预期的输出将是; ENV_ab 1.1.11.0 ENV_bb 1.1.10.0 ENV1_ab 1.1.11.0 这可行吗?我研究过关联数组,但它似乎不是解决这个问题的方法。
【问题讨论】:
-
为什么不打印
ENV_bb 1.1.10.0? -
请提供更多对样本输入和所需输出。还要尝试更详细地解释输出应该如何依赖于输入。
-
好的示例文件; ENV_aa 1.1.11.0、ENV_bb 1.1.11.0、ENV_cc 1.1.11.0、ENV1_aa 1.1.10.1、ENV1_bb 1.1.10.1、ENV1_cc 1.1.10.1、ENV2_aa 1.1.9.1、ENV2_bb 1.1.9.1、ENV2_cc 1.1.9。 - 每个 ENV 有三个用户(aa、bb 和 cc)。我正在尝试创建的测试是检查每个特定 ENV 的每个用户的版本。如果特定环境的三个用户具有相同的版本,则只需打印任何用户和该环境的版本。输出将是; ENV_aa 1.1.11.0 ENV1_aa 1.1.10.1 和 ENV2_aa 1.1.9.1。
-
但是,假设新文件文件对于 ENV 中的一个用户具有不同的发布版本;新文件; ENV_aa 1.1.11.0 ENV_bb 1.1.11.0,ENV_cc 1.1.11.0 ENV1_aa 1.1.10.1 ENV1_bb 1.1.10.1 ENV1_cc 1.1.10.1 ENV2_aa 1.1.9.1 ENV2_bb 1.1.10.1 ENV2_cc 1.1.9.1。现在我们可以看到 ENV_bb 与 ENV2_aa 和 ENV2_cc 有不同的版本。期望的输出现在是; ENV_aa 1.1.11.0 ENV1_aa 1.1.10.1 ENV2_aa 1.1.9.1,ENV2_bb 1.1.9.1。
-
所以第二个评论输出显示,因为一个用户有不同的发布版本,也应该与其他具有相同版本的环境一起打印在输出中。
标签: regex bash awk sed associative-array