Awk 我想检查第一列中的数字是否等于第二列中的数字

Awk 我想检查第一列中的数字是否等于第二列中的数字,awk,Awk,我想检查第1列中的数字是否等于第2列,第1列应以ABC开头,以DEF结尾,这些数字之间的数字应与第2列匹配 有人能帮我吗 我的意见: ABC12345DEF | 12345 | 23132331331| ABC95678DEF | 45678 | 23132331331 | ABC87887DEF | 86187 | 23132331331| ABC89043DEF | 89043 | 23132331331| 输出应为: ABC12345DEF | 12345 | 23132331331 |

我想检查第1列中的数字是否等于第2列,第1列应以ABC开头,以DEF结尾,这些数字之间的数字应与第2列匹配

有人能帮我吗

我的意见:

ABC12345DEF | 12345 | 23132331331|

ABC95678DEF | 45678 | 23132331331 |

ABC87887DEF | 86187 | 23132331331|

ABC89043DEF | 89043 | 23132331331|

输出应为:

ABC12345DEF | 12345 | 23132331331 |

ABC89043DEF | 89043 | 23132331331|

我试着用那个愚蠢的,但它不起作用。
awk-F'|'''''1!~/ABC+[$2]+DEF/'WHTFile.txt>QC2Valid.txt

这应该适合您的要求:

awk -F'|' '{s=$2;sub(/\s/,"",s)}$1 ~ s' input
ABC12345DEF |12345 |23132331331|
ABC89043DEF |89043 |23132331331|
代码中的问题:

不能通过以下方式连接awk中的字符串:+ 不能将awk中的字符串连接到/../,它是静态正则表达式 您应该使用~而不是!~,根据您描述的要求。 您的第二列有空字符串,您应该在匹配之前删除它们 在| 12345 |列中,是尾随空间数据吗?根据你提议的产出,我想不会。在这种情况下,分隔符不仅仅是管道字符

要查看$2是否嵌入到$1中的常量中,可以执行以下操作:

$ awk -F '[ |]' '"ABC" $2 "DEF" = $1 { print }'

谢谢你的信息,肯特,但是第一列应该以ABC开头,以DEF结尾,两者之间的数字应该与第二列匹配。@kris你可以轻松地扩展$1~s来实现它。