Bash 查找并替换与另一个文件中的字符串匹配的文件中的子字符串
我有两个txt文件:File1是一个有9列的tsv。以下为其第一行(Bash 查找并替换与另一个文件中的字符串匹配的文件中的子字符串,bash,awk,replace,grep,find,Bash,Awk,Replace,Grep,Find,我有两个txt文件:File1是一个有9列的tsv。以下为其第一行(SRR6691737.359236/0_14228//11999_12313为第一列,重复后为第九列): File2是一个有9列的tsv。以下为其第一行(读取后为第9列): 文件1包含读取名称(SRR6691737.359236)、读取长度(0\u 14228)和坐标(11999\u 12313)的信息,而文件2仅包含读取名称和坐标。file1中的所有读取名称和坐标都存在于file2中,但file2也可能包含具有不同坐标的相同读
SRR6691737.359236/0_14228//11999_12313
为第一列,重复后为第九列):
File2是一个有9列的tsv。以下为其第一行(读取后为第9列):
文件1包含读取名称(SRR6691737.359236
)、读取长度(0\u 14228)
和坐标(11999\u 12313
)的信息,而文件2仅包含读取名称和坐标。file1中的所有读取名称和坐标都存在于file2中,但file2也可能包含具有不同坐标的相同读取名称。文件2还包含文件1中不存在的读取名称
我想编写一个脚本,在file2中查找与file1中的读取名称和坐标匹配的读取名称和坐标,并将file1中的读取长度添加到file2。i、 e.更改文件2的最后一列:
Read SRR6691737.359236 11999 12313; Dup 277
致:
有什么帮助吗?如果不清楚输入文件的外观 你写道: 我有两个txt文件:File1是一个有9列的tsv。以下是 它的第一行(
SRR6691737.359236/0_14228//11999_12313
是第一行
列,重复后为第9列):
如果我尝试检查列(并将它们放入“Column,Value”对中):
列、值
1,SRR6691737.359236/0_14228//11999_12313
2、审查员
3,重复
4,5
5,264
6,1169
7,+
8.
9,重复
10,波瓦2
11,正弦
12,1
13,260
14,9
似乎有14列,您指定9列
你能编辑你的问题,并清楚这一点吗?
i、 e.指定为csv
SRR6691737.359236/0_14228//11999_12313,审查,重复,5,…
添加信息,反馈后:
文件1包含以下字段(制表符-,ancd分隔):
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, "--> " ;
}
FILENAME==“file1”{
拆分($1,a,“/”);
x=a[1]“a[4];
y=x;gsub(/,“”,y);
r[y]=1元;
c=1;(i在R){打印C++,i,“…”,r[i];}
}
文件名==“文件2”{
打印“”;
for(i在r中){
如果($9~i){
打印“B:r[i];
拆分(r[i],b,“/”;
$9=“读”r[i];
打印“OK”;
}
};
打印“”;
}
在此之后,gawk-f mani.awk file1 file2应生成正确的结果
如果不清楚输入文件的外观,我建议您学习AWK 你写道: 我有两个txt文件:File1是一个有9列的tsv。以下是 它的第一行(
SRR6691737.359236/0_14228//11999_12313
是第一行
列,重复后为第9列):
如果我尝试检查列(并将它们放入“Column,Value”对中):
列、值
1,SRR6691737.359236/0_14228//11999_12313
2、审查员
3,重复
4,5
5,264
6,1169
7,+
8.
9,重复
10,波瓦2
11,正弦
12,1
13,260
14,9
似乎有14列,您指定9列
你能编辑你的问题,并清楚这一点吗?
i、 e.指定为csv
SRR6691737.359236/0_14228//11999_12313,审查,重复,5,…
添加信息,反馈后:
文件1包含以下字段(制表符-,ancd分隔):
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, "--> " ;
}
FILENAME==“file1”{
拆分($1,a,“/”);
x=a[1]“a[4];
y=x;gsub(/,“”,y);
r[y]=1元;
c=1;(i在R){打印C++,i,“…”,r[i];}
}
文件名==“文件2”{
打印“”;
for(i在r中){
如果($9~i){
打印“B:r[i];
拆分(r[i],b,“/”;
$9=“读”r[i];
打印“OK”;
}
};
打印“”;
}
在此之后,gawk-f mani.awk file1 file2应生成正确的结果
如果不是的话,我建议你学习AWK欢迎这么说,现在还不清楚。请您提供输入样本和预期输出样本以及您的努力,然后让我们知道。请发布您已经尝试过的内容。问题复杂且不一致。请
Read SRR6691737.359236/0_14228//11999_12313; Dup 277
SRR6691737.359236/0_14228//11999_12313 Censor repeat 5 264 1169 + . Repeat BOV, ancd A2 SINE 1 260 9
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, "--> " ;
}