2013-07-04 42 views
0

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

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 

我想找出如果两个对(基于列1)有chrX,列的其余部分可能会有所不同。

在上面的例子中,我将只保留(只在乎列1是相同的,第3栏是chrX两个。)

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

我想尝试这AWK,但它似乎只专栏工作。我如何使用awk或grep来实现这个?

+0

你想过滤看起来像第一个的所有行? (意思是要计算该行的出现次数) – hek2mgl

回答

1

这比较线对,如果相应的field1和field3匹配,则打印两个线。

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

但是,如果第一列和第三列相同,这似乎可行。我希望第一列相同,第三列我特别感兴趣的是chrX。例如,我对那些column1相同而第三列是chr1的人不感兴趣。第3列应该是chrX。 – user1007742

+0

这就是'&& $ 3 ==“chrX”'条件对于 –

+0

非常感谢。作品完美。 – user1007742