Bash awk脚本不工作

Bash awk脚本不工作,bash,awk,Bash,Awk,两个文件的组件名称和版本号之间用空格分隔: 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 94.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 94.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
需要的输出是:file2中的所有组件的版本都高于file1中的版本

如果file2中的组件不在file1中,我们必须忽略file2中的组件,而file1中的组件具有相同版本和更低版本

在本例中,所需的输出为

com.acc.invm:FNS_APIPlat_BDMap 100.0.10
com.acc.invm:SendEmail 29.60.113
com.acc.invm:SendSms 133.28.65
尝试了此awk代码,但也从文件2中获取了数据

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

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
这条线

(curr > prev[$1]) || !($1 in prev)
应改为

($1 in prev) && (curr > prev[$1])
由于您希望忽略第二个文件中不在第一个文件中的项目,因此您的逻辑基本上是

if ($1 in prev) {
    if (curr > prev[$1]) {
        print
    }
}

但是
if(x)if(y)
相当于
if(x&&y)

目前我正在脚本中调用/usr/bin/nawk-f rst.awk file1 file2,是否可以在脚本本身中写入rst.awk的内容?之后,我不必每次检查rst.awk文件是否存在时都检查rst.awk文件。请帮忙