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