Awk 完全匹配后的两列中的部分匹配

Awk 完全匹配后的两列中的部分匹配,awk,string-matching,Awk,String Matching,我需要进行精确匹配,然后进行部分匹配,并从两列中检索字符串。理想情况下,我希望使用awk完成此操作 输入: k141_18046_1 k141_18046_1 k141_18046_1 k141_18046_2 k141_18046_2 k141_18046_1 k141_12033_1 k141_18046_2 k141_12033_1 k141_12033_1 k141_12033_2 k141_12033_2 k141_2012_1 k141_2

我需要进行
精确匹配,然后进行
部分匹配,并从两列中检索字符串。理想情况下,我希望使用
awk
完成此操作

输入:

k141_18046_1    k141_18046_1
k141_18046_1    k141_18046_2
k141_18046_2    k141_18046_1
k141_12033_1    k141_18046_2
k141_12033_1    k141_12033_1
k141_12033_2    k141_12033_2
k141_2012_1     k141_2012_1
k141_2012_1     k141_2012_2
k141_2012_2     k141_2012_1
k141_21_1     k141_2012_2
k141_21_1       k141_21_1
k141_21_2       k141_21_2
预期产出:

k141_18046_1    k141_18046_2
k141_18046_2    k141_18046_1
k141_2012_1     k141_2012_2
k141_2012_2     k141_2012_1
在这两列中,ID的第一部分是相同的。我需要获取ID_1&&ID_2(或)ID_2&&ID_1出现在一行中的ID

谢谢,,
Susheel根据评论更新:

$ awk '
$1!=$2 {                     # consider only unequal strings
    n=split($1,a,/_/)        # split them by undescored
    m=split($2,b,/_/)
    if(m==n) {               # there should be equal amount of parts
        for(i=1;i<n;i++)  
            if(a[i]!=b[i])   # all but last parts should equal
                next         # or not valid
    } else
        next
    print                    # if you made it so far...
}' file
另一个awk,使用
match()


对不起,我的错。。输入文件有其他未在前面定义的ID匹配,我将更新输入说明。非常抱歉!对不起,我编辑了我的原始样本描述。我也有这样的值:
k141\u13612\u2k141\u5573\u1
k141\u13612\u2k141\u19887\u1
k141_18046_1    k141_18046_2
k141_18046_2    k141_18046_1
k141_2012_1     k141_2012_2
k141_2012_2     k141_2012_1
$ awk '
substr($1,match($1,/^.*_/),RLENGTH) == substr($2,match($2,/^.*_/),RLENGTH) && 
substr($1,match($1,/[^_]*$/),RLENGTH) != substr($2,match($2,/[^_]*$/),RLENGTH)
' file