文件比较中的awk代码

文件比较中的awk代码,awk,nawk,Awk,Nawk,两个文件的组件名称和版本号之间用空格分隔: cat file1 com.acc.invm:FNS_PROD 94.0.5 com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6 com.acc.invm:FNS_APIPlat_BDMap 100.0.9 com.acc.invm:SendEmail 29.6.113 com.acc.invm:SendSms 12.23.65 cat file2 com.acc.invm:FNS_PROD 95.0.5 com.

两个文件的组件名称和版本号之间用空格分隔:

cat file1
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.9
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65

cat file2 
com.acc.invm:FNS_PROD 95.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.0.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
com.acc.invm:distri_cob 110
期望输出:

com.acc.invm:FNS_PROD 95.0.5
com.acc.invm:SendSms 133.28.65
需要的输出是:文件1中版本高于文件2中版本的所有组件仅位于第一个小数点位置

在所需输出中,“com.acc.invm:FNS_PROD”的出现是因为96(在文件1中)>95(在文件2中)

“com.acc.invm:FNS\u TEST\u DCCC\u management”不会出现,因为94.1.6(在文件1中)94.0.6(在文件2中)第一个十进制值相同(94=94)

尝试了awk代码,但没有成功

tst.awk
{ split($2,a,/\./); curr = a[1]*10000 + a[2]*100 + a[3] }
NR==FNR { prev[$1] = curr; next }
!($1 in prev) || (curr > prev[$1])
/usr/bin/nawk -f file2 file1 tst.awk

欢迎提出任何建议。

根据您的陈述(仅在小数点后第一位),您不需要
curr=a[1]*10000+a[2]*100+a[3]
。只要使用curr=a[1]就可以了

由于所需的输出仅包含file1和file2中的行,因此需要
($1在prev中)和&(curr>prev[$1])

{split($2,a,/\./); curr = a[1];}
NR==FNR {prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])
演示

lo@ubuntu:~$ cat f1
com.acc.invm:FNS_PROD 94.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.1.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.9
com.acc.invm:SendEmail 29.6.113
com.acc.invm:SendSms 12.23.65

lo@ubuntu:~$ cat f2
com.acc.invm:FNS_PROD 95.0.5
com.acc.invm:FNS_TEST_DCCC_Mangment 94.0.6
com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
com.acc.invm:distri_cob 110

lo@ubuntu:~$ awk -f t.awk f1 f2
com.acc.invm:FNS_PROD 95.0.5
com.acc.invm:SendSms 133.28.65

lo@ubuntu:~$ cat t.awk 
{split($2,a,/\./); curr = a[1];}
NR==FNR {prev[$1] = curr; next }
($1 in prev) && (curr > prev[$1])
awk'{Version=$2
子(/[.].*/,“”,版本)
如果(FNR==NR)版本化[$1]=Version
否则如果(版本设置[$1]<版本)打印
}'文件1文件2
您可以使用
Versionning[$1]!=“”&&versioning[$1]

awk '{ Version = $2 
       sub( /[.].*/, "", Version)
       if ( FNR == NR ) Versionning[ $1] = Version
        else if( Versionning[ $1] < Version) print
     }' file1 file2