作为第一次操作的结果,我有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
答案 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) )
希望这会有所帮助......