awk使用正则表达式比较同一行中的两个元素

awk使用正则表达式比较同一行中的两个元素,awk,Awk,我有很长的文件,需要比较同一行中的两个染色体编号。我想用awk创建一个文件,只取染色体数目不同的行 以下是我的文件示例: CHROM ALT 1 ]1:1234567]T 1 T[1:2345678[ 1 A[12:3456789[ 2 etc... 在本例中,我希望比较染色体的编号(此处“CHROM”列中的“1”)和第一个括号([或])和“:”符号之间的编号。如果这些数字不同,我希望打印相应的行 在这里,结果应该是这样的: 1

我有很长的文件,需要比较同一行中的两个染色体编号。我想用awk创建一个文件,只取染色体数目不同的行

以下是我的文件示例:

CHROM   ALT
    1   ]1:1234567]T
    1   T[1:2345678[
    1   A[12:3456789[
    2   etc...
在本例中,我希望比较染色体的编号(此处“CHROM”列中的“1”)和第一个括号([或])和“:”符号之间的编号。如果这些数字不同,我希望打印相应的行

在这里,结果应该是这样的:

    1   A[12:3456789[

谢谢您的帮助。

这需要GNU awk作为3参数
match()
函数:

$ awk -F'[][]' '$1+0 != $2+0' file
    1   A[12:3456789[
    2   etc...
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   ...       ...       .   ...

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

嘿,为什么在这里强制转换为一个数字?谢谢你的回答。如果在这两列之间有几列,我应该更改代码的哪一部分?不客气。用不同的数据发布一个后续问题。@hek2mgl使用
[
]
,因为FS$1是
1a
,而$2是
12:3456789
,所以通过添加零,我将去掉前导数字后面的所有内容,并删除每个前导空格。在awk中,
$1
是第一列的值,
$2
是第二列的值,依此类推。使用此数据,您希望从第五列中提取chromasome编号。此外,此数据与您的问题相关:您应该编辑您的问题并将此信息放在那里,而不是发布答案(事实并非如此)