我想检查第一列中的数字是否等于第二列,第一列应该以以下格式开始和结束



我想检查第一列中的数字是否等于第二列,第一列应该以"ABC"开头并以"DEF"结尾,但有时它以"ABC"##"DEF"或"DEFZ#"之间的"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

您能否尝试关注并让我知道这是否对您有帮助。

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

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表达式的奖励解决方案:

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

最新更新