问题描述
我正在尝试使用awk键进行比较。
我在其他context中使用了以下行。
想法是对相同的正则表达式再次使用相同的方法,并将其放入新文件中:
awk'NR == FNR {a [$ 1,$ 2,$ 3];下一个}!(((a中的$ 1,$ 2,$ 3))'file2 file1
这次,这些列不能直接进行比较:
var
express = require("express");
var app = express();
var server = require("http").Server(app);
var client = new net.socket();
client.connect(8124,"127.0.0.1",function () {
console.log("Connected");
client.write("Secrect Code Here");
});
client.on("data",function (data) {
console.log("Received: " + data);
});
client.on("close",function () {
console.log("Connection closed");
});
-
文件A的第2列和第3列以及文件B的第3列和第4列是范围。 在此示例中,第一个范围的开始是
file_A.txt chr1 1 10000 chr2 2 500 chr3 1 20000 chr1 10 15 file_B.narrowPeak abs42322 chr1 25 15000 rvy42134 chr2 1 400 ttx24124 chr3 1 20000 sadas664 chr1 3 14
,结束是1
, 第二个范围是10000
至1
,因此... 下一步应该是过滤掉文件B中的行 范围不包含在 文件A的范围,仅比较第一步中匹配的行。
示例:
由于以下原因,将文件B的第1行与文件A的第1行和第4行进行了比较:
400
。范围chr1
大于25-15000
和1-10000
,因此该行被过滤掉了。
由于10-15
,文件B的第3行与文件A的第3行进行了比较。的
范围chr3
包含在1-20000
中(此处等于),因此此行存储在输出文件中。
1-20000
编辑: 真实数据看起来像这样。实际上,文件要长得多,因此,第2列的多样性要大得多,如下所示。
文件A
ttx24124 chr3 1 20000
sadas664 chr1 3 14
文件B
chr2 16148738 89330679
chr2 10845 16143362
chr2 94570062 106475164
chr2 99510860 113404812
chr2 86925269 87697988
chr2 91415844 91839817
chr9 64343270 64801485
chr9 65740027 66179306
chr1 144610018 144888777
chr2 95802871 108756829
chr16_KI270728v1_random 173055 1246276
chr9 63252862 63477334
chr2_KI270774v1_alt 0 188910
chr1_KI270712v1_random 7198 176043
chr9 63008373 63202857
chr2_GL383521v1_alt 0 143390
chr2 89530679 89663939
chr2 90236570 90402011
chr2_KI270894v1_alt 42931 213658
chr1 143320490 144356500
chr2 108732003 109758895
chr2_KI270770v1_alt 8875 136240
chr9 65130082 65281495
chr2 89767603 89960747
chr2_KI270769v1_alt 0 116362
chr2 94187600 94293015
chr9 40238354 40677933
chr2_KI270772v1_alt 1330 133041
chr16 33932082 34096118
chr13 18259709 18357163
chr14_KI270725v1_random 22583 138472
chr16 34779380 34943880
chr7 60892044 60992155
chr2_KI270773v1_alt 0 70886
chr2 110445435 110530068
chr9 43236167 43304276
chr22 10628203 10690626
chr2 87340235 87402756
chr21 8651170 8706715
chrUn_KI270744v1 38861 105138
chr2 110395939 110441265
chr2 109930242 109975557
chr1 143315267 144153087
chr17 26716619 26775606
解决方法
将您的输入转换为bed格式。 3个必填字段是染色体,开始位置和结束位置。其余字段是可选的。然后使用bedtools intersect
包中的bedtools
。例如:
# Create input files:
cat > file_A.txt <<EOF
chr1 1 10000
chr2 2 500
chr3 1 20000
chr1 10 15
EOF
cat > file_B.narrowPeak <<EOF
abs42322 chr1 25 15000
rvy42134 chr2 1 400
ttx24124 chr3 1 20000
sadas664 chr1 3 14
EOF
# Convert to bed format:
perl -lane 'print join "\t",@F;' file_A.txt > file_A.bed
perl -lane 'print join "\t",@F[1,2,3];' file_B.narrowPeak > file_B.bed
# Find feature in file_B.bed contained entirely in file_A.bed:
bedtools intersect -a file_B.bed -b file_A.bed -wa -f 1.0 > file_A_in_B.bed
输出:
chr3 1 20000
chr1 3 14
bedtools intersect
命令与以下选项一起使用:
-wa
:为每个重叠部分写在-a
选项(file_B.bed
)中指定的文件的原始条目。-f
:作为-a
选项中指定文件的分数的最小重叠量。使用分数= 1.0可以确保file_B.bed
中包含file_A.bed
功能的100%。