我想检查第1列中的数字是否等于第2列,第1列应该开始,结束时使用以下格式

时间:2017-08-25 19:41:53

标签: linux awk

我想检查第1列中的数字是否等于第2列,第1列应该以“ABC”开头并以“DEF”结尾但有时它以“ABC”之间的“DEFZ#”数字结尾######“DEF”或“DEFZ#”应与第二列匹配。请有人帮我。

我的意见

>ABC12345DEF | 12345  |23132331331|
>ABC12345DEFZ1 | 12345  |23132331331|
>ABC12345DEFZ2 | 12345  |23132331331|
>ABC95678DEF | 45678  |23132331331| 
>ABC87887DEF | 86187  |23132331331|
>ABC89043DEF | 89043  |23132331331|
>ABC89043DEFZ1 | 89043  |23132331331|
>ABC89043DEFZ2 | 89043  |23132331331|
>ABC89043DEFZ3 | 89043  |23132331331|

输出应为:

>ABC12345DEF |12345 |23132331331|

>ABC12345DEFZ1 |12345 |23132331331|

>ABC12345DEFZ2 |12345 |23132331331|

>ABC89043DEFZ1 |89043 |23132331331|

>ABC89043DEFZ2 |89043 |23132331331|

>ABC89043DEFZ3 |89043 |23132331331|

我正在尝试使用以下内容,但它无效。 awk -F '|' '"ABC" $2 "DEF" != $1 { print }' WHTFile.txt > QC2Valid.txt

2 个答案:

答案 0 :(得分:1)

awk 解决方案:

awk -F' *\\| *' '{ match($1,/[0-9]+/) }substr($1,RSTART,RLENGTH)==$2' OFS='|' WHTFile.txt

输出:

ABC12345DEF |12345 |23132331331|
ABC12345DEFZ1 |12345 |23132331331|
ABC12345DEFZ2 |12345 |23132331331|
ABC89043DEF |89043 |23132331331|
ABC89043DEFZ1 |89043 |23132331331|
ABC89043DEFZ2 |89043 |23132331331|
ABC89043DEFZ3 |89043 |23132331331|
使用 sed 表达式

Bonus 解决方案:

sed -E '/^ABC([0-9]+)DEF[^\s|]*\s*\|\s*\1/!d' WHTFile.txt

答案 1 :(得分:1)

请您试着跟随并告诉我这是否对您有帮助。

awk -F"|" '
$1 ~ /^ABC[0-9]+DEF[123Z]/ || $1 ~ /^ABC[0-9]+DEF/{
   sub(/ +$/,"",$2);
   match($1,/[0-9]+/);
   if(substr($0,RSTART,RLENGTH)==$2){
     print
}
}
' OFS="|"  Input_file