如何使用awk或grep比较基于列的行

时间:2013-07-04 15:33:05

标签: awk grep compare line

我想逐行比较我的数据。每个条目都有一个副本,有些列有些不同(它是制表符分隔的)。作为一个例子

1   0   chrX    121843122   255 16M
1   0   chrX    79062186    250 16M
2   0   chr3    79062186    255 16M
2   0   chr7    79062186    255 16M
3   0   chr3    166649831   255 16M   
3   0   chrX    12345678    255 16M

我想知道两个对(基于column1)是否都有chrX,其余列可能不同。

在上面的例子中,我只保留(只有第1列与第1列相同而第3列为chrX。)

1   0   chrX    121843122   255 16M
1   0   chrX    79062186    250 16M

我想在awk中尝试这个,但它似乎只能按列工作。我如何使用awk或grep实现这个?

1 个答案:

答案 0 :(得分:1)

这比较了几行,如果相应的field1和field3匹配,则打印两者。

awk '{
    prev=$0; f1=$1; f3=$3
    getline 
    if ($1 == f1 && $3 == f3 && $3 == "chrX") {
        print prev
        print
    }
}' filename