Bash 查找并替换与另一个文件中的字符串匹配的文件中的子字符串

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也可能包含具有不同坐标的相同读

我有两个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也可能包含具有不同坐标的相同读取名称。文件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分隔):

  • SRR6691737.359236/0_14228//11999_12313
  • 审查员
  • 五,
  • 264
  • 1169
  • +
  • 重复BOVA2正弦12609
  • 要将此文件(使用脚本)转换为选项卡分隔的文件:

  • CM011822.1
  • 冷藏车
  • 距离
  • 63738705
  • 63738727
  • +
  • 阅读SRR6691737.359236 11999 12313
  • DUP277
  • 需要更多的信息来解决这个问题

    字段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, "--> " ;
    }
    
    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分隔):

  • SRR6691737.359236/0_14228//11999_12313
  • 审查员
  • 五,
  • 264
  • 1169
  • +
  • 重复BOVA2正弦12609
  • 要将此文件(使用脚本)转换为选项卡分隔的文件:

  • CM011822.1
  • 冷藏车
  • 距离
  • 63738705
  • 63738727
  • +
  • 阅读SRR6691737.359236 11999 12313
  • DUP277
  • 需要更多的信息来解决这个问题

    字段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, "--> " ;
    }
    
    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, "--> " ;
    }