【发布时间】:2014-05-24 07:56:49
【问题描述】:
我有两个文件。第一个文件如下所示:
1 174392
1 230402
2 4933400
3 39322
4 42390021
5 80022392
6 3818110
等等
第二个文件如下所示:
chr1 23987 137011
chr1 220320 439292
chr2 220320 439292
chr2 2389328 3293292
chr3 392329 398191
chr4 421212 3292393
等等。
我想返回整行,前提是 FILE1 中的第一列 = FILE2 中的第一行,作为字符串匹配并且文件 2 中的第二列大于 FILE2 中的第 2 列但小于 FILE2 中的第 3 列.
所以在上面的例子中,行
1 230402
在 FILE1 和
chr1 220320 439292
在 FILE2 中将满足条件,因为 230402 在 220320 和 439292 之间,并且在我使字符串匹配后 1 将等于 chr1,因此将打印 FILE2 中的该行。
我写的代码是这样的:
#!/bin/bash
$F1="FILE1.txt"
read COL1 COL2
do
grep -w "chr$COL1" FILE2.tsv \
| awk -v C2=$COL2 '{if (C2>$1 && C2<$2); print $0}'
done < "$F1"
我已经尝试了很多变体。我不在乎代码是完全在 awk 中、完全在 bash 中还是混合在一起。
谁能帮忙?
谢谢!
【问题讨论】:
-
我假设您的意思是
the first column in FILE1 = the first column in FILE2和the 2nd column in FILE1 is greater than column 2 in FILE2?