Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从第1-6行、第6-12行等处读取一个文件,比较其中一列,看它们是否有相同的版本_Bash_Shell_Unix_Awk_Sed - Fatal编程技术网

Bash 从第1-6行、第6-12行等处读取一个文件,比较其中一列,看它们是否有相同的版本

Bash 从第1-6行、第6-12行等处读取一个文件,比较其中一列,看它们是否有相同的版本,bash,shell,unix,awk,sed,Bash,Shell,Unix,Awk,Sed,我有一个文件,按照下面的顺序排序 ENVTEST_SG CPSG01 1.1.11.0 ENVTEST_ATS CP01 1.1.11.0 ENVTEST_CC CPMTECH01 1.1.11.0 ENVTEST_BI CPBI01 1.1.11.0 ENVTEST_SER CPSER01 1.1.11.0 ENVTEST_YAAN CPYAAN01 1.1.11.0 <Space added here for clear viewing> ENVTEST1_ATS CP02 1.

我有一个文件,按照下面的顺序排序

ENVTEST_SG CPSG01 1.1.11.0
ENVTEST_ATS CP01 1.1.11.0
ENVTEST_CC CPMTECH01 1.1.11.0
ENVTEST_BI CPBI01 1.1.11.0
ENVTEST_SER CPSER01 1.1.11.0
ENVTEST_YAAN CPYAAN01 1.1.11.0
<Space added here for clear viewing>
ENVTEST1_ATS CP02 1.1.10.3
ENVTEST1_CC CPMTECH02 1.1.10.3
ENVTEST1_BI CPBI02 1.1.10.3
ENVTEST1_SER CPSER02 1.1.10.3
ENVTEST1_SG CPSG02 1.1.10.3
ENVTEST1_YAAN CPYAAN02 1.1.10.3
ENVTEST2_ATS CP03 1.1.10.3
ENVTEST2_SG CPSG03 1.1.10.3
ENVTEST2_SER CPSER03 1.1.10.3
ENVTEST2_CC CPMTECH03 1.1.10.3
ENVTEST2_YAAN CPYAAN03 1.1.10.3
ENVTEST2_BI CPBI03 1.1.10.3
<Space added here for clear viewing>
ENVTEST3_ATS CP04 1.1.10.3
ENVTEST3_CC CPMTECH04 1.1.10.3
ENVTEST3_SG CPSG04 1.1.10.3
ENVTEST3_SER CPSER04 1.1.10.3
ENVTEST3_BI CPBI04 1.1.10.3
ENVTEST3_YAAN CPYAAN04 1.1.10.3
首先,我想检查这6个用户是否有相同的版本。如果有,就这样打印

ENVTEST_(可以是任何)SIT1 1.1.11.0(只需要系统中任何用户的一行)


请有人能给我指出正确的方向或帮助解决这个问题吗??非常感谢您的帮助。

如果您只想打印特定环境下具有相同版本号的行,则可以使用以下命令:

awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT1 "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT"substr(a[1],8,9)" "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
它将打印:

ENVTEST2_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST_(CAN BE ANY) SIT1 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST2_(CAN BE ANY) SIT2 1.1.10.3
ENVTEST_(CAN BE ANY) SIT 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT3 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
如果您希望
SIT
根据
envetest
变化,请参考以下命令:

awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT1 "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT"substr(a[1],8,9)" "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
它将打印:

ENVTEST2_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST_(CAN BE ANY) SIT1 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST2_(CAN BE ANY) SIT2 1.1.10.3
ENVTEST_(CAN BE ANY) SIT 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT3 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3

如果您只想打印特定环境中具有相同版本号的行,则可以执行以下命令:

awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT1 "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT"substr(a[1],8,9)" "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
它将打印:

ENVTEST2_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST_(CAN BE ANY) SIT1 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST2_(CAN BE ANY) SIT2 1.1.10.3
ENVTEST_(CAN BE ANY) SIT 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT3 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
如果您希望
SIT
根据
envetest
变化,请参考以下命令:

awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT1 "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
awk '{split($1,a,"_"); res[a[1]" "$3]=a[1]"_(CAN BE ANY) SIT"substr(a[1],8,9)" "$3; cnt[a[1]" "$3]++;} END {for(i in res){if(cnt[i]==6){print res[i]}}}' file
它将打印:

ENVTEST2_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST_(CAN BE ANY) SIT1 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3
ENVTEST2_(CAN BE ANY) SIT2 1.1.10.3
ENVTEST_(CAN BE ANY) SIT 1.1.11.0
ENVTEST3_(CAN BE ANY) SIT3 1.1.10.3
ENVTEST1_(CAN BE ANY) SIT1 1.1.10.3

awk-F:'{if(!($1==$2 | |$2==$3 | |$3==$1))printf(“%s”,“not”);print“matched”,$0}----我已经试过了,但似乎无法阅读6行并比较版本列。awk-F:'{if(!($1=$2 |$2=$3=$1))printf'------------我试过这个,但似乎无法阅读6行并比较版本栏。嗨,阿比南丹,非常感谢你的上述回复,它按照建议工作。我可以厚着脸皮问一下,如何在上面的代码中命名每个env。也就是说,我想要ENTEST2 SIT2 1.1.10.3和ENVTEST1 SIT1 1.1.10.3等。请您也解释一下代码是如何工作的?与其只是抄袭,还不如理解。我再次感谢得到的帮助和支持。:)@你的意思是,你不需要“(可以是任何人)”我很难理解你的预期产出。你提到你的预期产出如下:
CCPTEST6\u SG SIT6 1.1.11.1
CCPTEST3\u SG SIT3 1.1.10.3
CCPTEST2\u SG SIT3 1.1.10.3
CCPTEST9\u SG SIT9 1.1.11.1
CCPTEST4\u SG SIT4 1.1.1.11.1
CCPTEST5\u SG SIT5 1.1.11.0.i5
CCPTEST5\u SG SIT5 1.1.11.0.i5
CCPTEST1\u SG SIT1.1.10.3
CCPTEST10\u SG SIT10 1.1.10.3对不起,您是如何从给定的输入文件驱动此输出的。我真的不明白。很抱歉,我的预期输出不正确。期望输出为;环境测试2_(可以是任何)SIT2 1.1.10.3环境测试_(可以是任何)SIT1.1.11.0环境测试3_(可以是任何)SIT3 1.1.10.3环境测试1_(可以是任何)SIT1 1.1.10.3为混淆道歉。我从oracle数据库中提取此信息,并为每个用户选择版本号(可以是any=user),然后转储到文本文件中。与原始答案的唯一区别是,我只想命名第二列SIT1-10等。我还想在这个命令中添加一个测试。每个ENV有6个用户(ATS、SG等)。我想测试每个ENV_用户的版本号是否相同,如果相同,则为每个ENV的任何用户只打印一行。也就是说,ENV1有6个用户,并且他们都有相同的发布版本,因此代码将为此只打印1行;环境1 SIT1 1.1.11.0。但是,如果该环境的一个或多个用户不同,则抛出错误或声明版本不同。这可能吗?嗨,阿比南丹,非常感谢你的上述回复,它按照建议工作。我可以厚着脸皮问一下,如何在上面的代码中命名每个env。也就是说,我想要ENTEST2 SIT2 1.1.10.3和ENVTEST1 SIT1 1.1.10.3等。请您也解释一下代码是如何工作的?与其只是抄袭,还不如理解。我再次感谢得到的帮助和支持。:)@你的意思是,你不需要“(可以是任何人)”我很难理解你的预期产出。你提到你的预期产出如下:
CCPTEST6\u SG SIT6 1.1.11.1
CCPTEST3\u SG SIT3 1.1.10.3
CCPTEST2\u SG SIT3 1.1.10.3
CCPTEST9\u SG SIT9 1.1.11.1
CCPTEST4\u SG SIT4 1.1.1.11.1
CCPTEST5\u SG SIT5 1.1.11.0.i5
CCPTEST5\u SG SIT5 1.1.11.0.i5
CCPTEST1\u SG SIT1.1.10.3
CCPTEST10\u SG SIT10 1.1.10.3对不起,您是如何从给定的输入文件驱动此输出的。我真的不明白。很抱歉,我的预期输出不正确。期望输出为;环境测试2_(可以是任何)SIT2 1.1.10.3环境测试_(可以是任何)SIT1.1.11.0环境测试3_(可以是任何)SIT3 1.1.10.3环境测试1_(可以是任何)SIT1 1.1.10.3为混淆道歉。我从oracle数据库中提取此信息,并为每个用户选择版本号(可以是any=user),然后转储到文本文件中。与原始答案的唯一区别是,我只想命名第二列SIT1-10等。我还想在这个命令中添加一个测试。每个ENV有6个用户(ATS、SG等)。我想测试每个ENV_用户的版本号是否相同,如果相同,则为每个ENV的任何用户只打印一行。也就是说,ENV1有6个用户,并且他们都有相同的发布版本,因此代码将为此只打印1行;环境1 SIT1 1.1.11.0。但是,如果该环境的一个或多个用户不同,则抛出错误或声明版本不同。这可能吗?