我有一个文件如下;
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。
如果所有envs文件相同,则上述预期输出;
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 这可行吗?我已经研究了关联数组,但它似乎不是解决方案。
答案 0 :(得分:0)
IF 我明白你要做什么,就是这样:
KEY_dk VERSION
模式定义一个组并忽略dk
的文件在awk
中你可以这样做:
$ awk '{split($1, x, "_")
if (a[x[1], $2]) next
a[x[1], $2]=$1 OFS $2 }
END{ for (i in a) print a[i]}' file
ENV1_ab 1.1.11.0
ENV_ab 1.1.11.0
ENV1_bb 1.1.10.0
打印的订单与文件顺序不同,因为关联数组在awk
中是无序的。如果您希望输出与文件顺序相同,只需循环文件两次。
答案 1 :(得分:0)
非常感谢你们的支持。我找到了问题的答案,如下所示;
awk'{split($ 1,a,“”); res [a [1]“”$ 3] = a [1]“”a [2]“”$ 3; cnt [a [1]“”$ 3] ++;} END {for(i in res)print“output:”res [i]}'file
- 这样做是单独检查ENV(X)_(y)版本(因此检查所有ENV1版本相互之间)并且只打印一行重复项,如果其中一行不是,也会打印版本与其他人相匹配。
即。我有一个包含以下内容的文件;
<Input File>
ENV_aa 1.1.11.0
Env_bb 1.1.11.0
Env_cc 1.1.10.0
Env1_aa 1.1.10.0
Env1_bb 1.1.10.0
Env1_cc 1.1.10.0
<Input File>
Output;
ENV_aa 1.1.11.0
Env_cc 1.1.10.0
Env1_bb 1.1.10.0
再一次,伙计们,感谢您的支持,我是这个行业的新手,并感谢所获得的支持。