awk将同一行中的两个元素与正则表达式进行比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk将同一行中的两个元素与正则表达式进行比较相关的知识,希望对你有一定的参考价值。

我的文件很长,我必须比较同一行中存在的两个染色体编号。我想使用awk创建一个仅采用染色体编号不同的行的文件。

这是我的文件的示例:

CHROM   ALT
    1   ]1:1234567]T
    1   T[1:2345678[
    1   A[12:3456789[
    2   etc...

在此示例中,我希望比较染色体的编号(在CHROM列中为'1')和第一个方括号([或])与“:”符号之间的编号。如果这些数字不同,我希望打印相应的行。

这里,结果应该像这样:

    1   A[12:3456789[

谢谢您的帮助。

答案
$ awk -F'[][]' '$1+0 != $2+0' file
    1   A[12:3456789[
    2   etc...
另一答案

这需要3个参数match()函数的GNU awk:

gawk 'match($2, /[][]([0-9]+):/, a) && $1 != a[1]' file
另一答案

再次感谢您提供不同的答案。

下面是几列的数据:

CHROM   POS       ID      REF   ALT
    1   1000000   123:1     A   ]1:1234567]T
    1   2000000   456:1     A   T[1:2345678[
    1   3000000   789:1     T   A[12:3456789[
    2   ...       ...       .   ...

我的问题是:当我有几列时,如何修改前面的代码?

另一答案
awk '/....1...A.12:/{print $0}' file

    1   A[12:3456789[

以上是关于awk将同一行中的两个元素与正则表达式进行比较的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:awk

Linux学习(二十五)正则表达式awk

linux学习:sed与awk与tr用法整理

正则表达式 三剑客--awk

匹配 AWK 中多行的正则表达式。 && 操作员?

linux awk命令的使用