使用awk从两个不同的文件中获得“共识”结果

时间:2013-05-28 09:35:45

标签: awk compare consensus

作为第一次操作的结果,我有file1,它具有以下结构

201            12               0.298231           8.8942
206            13               -0.079795           0.6367
101            34               0.86348           0.7456
301            15               0.215355           4.6378
303            16               0.244734           5.9895

file2是不同操作的结果,具有相同类型的结构。

文件2样本

204            60               -0.246038           6.0535
304            83               -0.246209           6.0619
101            34               -0.456629           6.0826
211            36               -0.247003           6.1011
305            83               -0.247134           6.1075
206            46               -0.247485           6.1249
210            39               -0.248066           6.1537
107            41               -0.248201           6.1603
102            20               -0.248542           6.1773

我想在file1(0.8)中选择字段3值高于阈值的字段1和2,然后对于字段1和2的这些选定值,选择值字段3的值高于文件2中的另一个阈值(abs(x)= 0.4)。

请注意,虽然文件1和2具有相同的结构字段1和2的值不相同(不是相同数量的行等...)

您可以使用awk吗?

期望的输出 101 34

1 个答案:

答案 0 :(得分:0)

如果将awk与unix命令结合使用,则可以执行以下操作

sort file1.txt > sorted1.txt sort file2.txt > sorted2.txt

排序将允许您在第一行使用JOIN(我假设它是唯一的)。现在file1的字段3是$ 3而file2是$ 6。使用awk,您可以编写以下内容:

join sorted1.txt sorted2.txt | awk 'function abs(value){return (value<0?-value:value);}{print $1"\t"$2} $3 >=0.8 && abs($6) >=0.4'

本质上,在awk中你首先编写一个处理绝对值的函数,然后你只需要它打印第1行和第2行,选择你在$ 3和$ 6详细说明的标准(分别为file1和file2的formely字段3) )

希望这会有所帮助......