0

我有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

4

1 回答 1

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 的字段 3)

希望这可以帮助...

于 2013-06-03T15:40:44.440 回答