我有两个txt文件: File1 是具有9列的tsv。以下是其第一行(SRR6691737.359236/0_14228//11999_12313
是第一列,而Repeat是第9列):
SRR6691737.359236/0_14228//11999_12313 Censor repeat 5 264 1169 + . Repeat BOVA2 SINE 1 260 9
File2 是具有9列的tsv。以下是其第一行(在“ Read”为第9列之后):
CM011822.1 reefer discordance 63738705 63738727 . + . Read SRR6691737.359236 11999 12313; Dup 277
文件1包含读取名称(SRR6691737.359236
),读取长度(0_14228)
和坐标(11999_12313
)的信息,而文件2仅包含读取名称和坐标。 file1存在于file2中,但是file2也可能包含具有不同坐标的相同读取名称,而且file2包含file1中不存在的读取名称。
我想编写一个脚本,该脚本在file2中查找与file1中的名称和坐标相匹配的读取名称和坐标,并将读取长度从file1添加到file2。即更改file2的最后一列:
Read SRR6691737.359236 11999 12313; Dup 277
至:
Read SRR6691737.359236/0_14228//11999_12313; Dup 277
有什么帮助吗?
答案 0 :(得分:0)
如果不清楚您的输入文件的外观。
您写:
我有两个txt文件: File1 是具有9列的tsv。以下是 它的第一行(
SRR6691737.359236/0_14228//11999_12313
是第一行 列,“重复”之后是第9列):SRR6691737.359236/0_14228//11999_12313 Censor repeat 5 264 1169 + . Repeat BOV, ancd A2 SINE 1 260 9
如果我尝试检查列(并将它们放在“列,值”对中): 列,值 1,SRR6691737.359236 / 0_14228 // 11999_12313 2,审查员 3,重复 4,5 5,264 6,1169 7+ 8, 9,重复 10,BOVA2 11,正弦 12,1 13,260 14,9
似乎有14列,您指定了9列...
您可以编辑您的问题,并对此清楚吗?
即指定为csv
SRR6691737.359236/0_14228//11999_12313,Censor,repeat,5,.....
添加信息,反馈后: file1包含以下字段(用Tab-和ancd分隔):
您要将其(使用脚本)转换为制表符分隔的文件:
需要更多信息来解决这个问题!
字段1:“ CM011822.1”的信息来自何处?
字段2和3:“冷藏箱” /“距离”。这些固定字段是否应该总是包含这些文本,还是有例外?
字段4和5:这些值(63738705; 63738727)来自哪里?
好吧,很显然,这里有更多的问题要问……
第二次更改...:
创建一个文件,名称为'mani.awk':
FILENAME=="file1"{
split($1,a,"/");
x=a[1] " " a[4];
y=x; gsub(/_/," ",y);
r[y]=$1;
c=1; for (i in r) { print c++,i,"....",r[i]; }
}
FILENAME=="file2"{
print "<--", $0, "--> " ;
for (i in r) {
if ($9 ~ i) {
print "B:" r[i];
split(r[i],b,"/");
$9="Read " r[i];
print "OK";
}
};
print "<--", $0, "--> " ;
}
在此之后,gawk -f mani.awk file1 file2
将产生正确的结果。
如果没有,我建议您学习AWK?,并根据需要更改脚本。