2016-06-20 52 views
-1

当我在做file.txt文件记录积> FILE2.TXT使用命令:删除具有相同横产品价值记录AWK

join file1.txt{,} -j999 > file2.txt

我得到FILE1.TXT每个记录所有的在FILE1.TXT记录,如:

样本数据集

r1 
r2 
r3 

我得到

r1 r1 
r1 r2 
r1 r3 
r2 r1 
r2 r2 
r2 r3 
r3 r1 
r3 r2 
r3 r3 

我不想R1,R1,R2 R2,记录等等...

如果同时做跨产品的可能吧,我该如何预期的结果?如果没有,我该如何处理加入FILE1.TXT后删除记录{,} -j 999

我试图与另一awk命令:

if($i!=$(i+12)){print $0;} and 

if($1!=$13){print $0;} 

因为我有每个记录1的序列号, 2,3,... 我已经FILE2.TXT为:

c1 c13 --> column 1 and column 13 
1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 
3 1 
3 2 
3 3 
3 4 

我简单地比较序列号,如果他们不相等打印的记录。 但我得到意外的结果,如:

1 2 
1 3 
1 4 
2 3 
2 4 
3 4 

你可以看到它之前$ 1 = $ 13跳过所有记录!所以有行缺少这样的:

2 1 
3 1 
3 2 

它应该只跳过那些图案R1,R1,R2 R2,记录...

更新

image

1日和13日col是序列号。

+0

请更新呈现出[MCVE] - 与文本,而不是图像。否则,很难在解决方案上工作。 – fedorqui

回答

1

只要环路通过文件两次:

awk 'FNR==NR {a[FNR]=$0; next} 
    BEGINFILE{lines=NR-FNR} 
    { 
     for (i=1;i<=lines;i++) { 
      if (i!=FNR) print $0, a[i] 
     } 
    }' file file 

读取所述第一时间时,此存储在数组a[line_number]=value_on_that_line的数据。然后,当第二次读取时,它只是遍历打印所有对的行数,除非行号与索引匹配 - 即当它们映射到同一行时。

对于R1,R2您指定的文件,R3返回:

$ awk 'FNR==NR {a[FNR]=$0; next} BEGINFILE{lines=NR-FNR} {for (i=1;i<=lines;i++) { if (i!=FNR) print $0, a[i]}}' f f 
r1 r2 
r1 r3 
r2 r1 
r2 r3 
r3 r1 
r3 r2 
+0

我正在尝试,但我有4,000,000条记录。而且我总共有26个cols,其中r1和r2各有16个cols并且它花费了很多时间。有没有比你提供的有效的方式去除?就像比较$ i == $(i + 12)。如果相等,那么在每条记录中,如果记录具有与未来13个字段相匹配的前13个字段。删除线?或者什么也不打印,因此被删除 –

+0

@MurlidharFichadia:两列的数字都是固定的吗?像col 1和10? – Inian

+0

@Inian请检查图像 –

相关问题