我想检查第1列中的数字是否等于第2列

时间:2017-08-14 15:45:48

标签: awk

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

请帮助我。

我的意见

ABC 12345 DEF | 12345 | 23132331331 |

ABC 95678 DEF | 45678 | 23132331331 |

ABC 87887 DEF | 86187 | 23132331331 |

ABC 89043 DEF | 89043 | 23132331331 |

输出应为:

ABC 12345 DEF | 12345 | 23132331331 |

ABC 89043 DEF | 89043 | 23132331331 |

我试图使用那些愚蠢的,但它没有用。 awk -F' |' '($ 1!〜/ ABC + [$ 2] + DEF /)' WHTFile.txt> QC2Valid.txt

2 个答案:

答案 0 :(得分:1)

这应该适合您的要求:

awk -F'|' '{s=$2;sub(/\s/,"",s)}$1 ~ s' input
ABC12345DEF |12345 |23132331331|
ABC89043DEF |89043 |23132331331|

您的代码中的问题:

  • 你无法通过+
  • 连接awk中的字符串
  • 你不能在/.../之间的awk中连接字符串,它是静态正则表达式
  • 您应该根据您描述的要求使用~代替!~
  • 你的第二列有空字符串,你应该在匹配之前删除它们

答案 1 :(得分:0)

|12345 |列中,是尾随空格数据吗?我假设没有,基于你提出的输出。在这种情况下,分隔符不仅仅是管道符。

要查看$ 2是否嵌入$ 1中的常量中,这将起到作用:

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