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

     2023-03-11     165

关键词:

【中文标题】查找和替换文件中与另一个文件中的字符串匹配的子字符串【英文标题】:find and replace substrings in a file which match strings in another file 【发布时间】:2020-03-25 12:03:21 【问题描述】:

我有两个 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仅包含读取名称和坐标。文件1中的所有读取名称和坐标都存在于文件2中,但 file2 也可能包含具有不同坐标的相同读取名称。此外,file2 包含 file1 中不存在的读取名称。

我想编写一个脚本,在 file2 中找到与 file1 中的匹配的读取名称和坐标,并将读取长度从 file1 添加到 file2。即更改file2的最后一列:

Read SRR6691737.359236 11999 12313; Dup 277

到:

Read SRR6691737.359236/0_14228//11999_12313; Dup 277

有什么帮助吗?

【问题讨论】:

欢迎来到SO,不清楚。您能否提供输入样本和预期输出样本以及您的努力,然后让我们知道。 请发布您已经尝试过的内容 问题令人费解且不一致。请提供更多重复的样本输入和相应的输出。文件描述和字段分隔符与 TSV 文件不一致。请改进解释。 【参考方案1】:

如果不清楚您的输入文件的外观。

你写:

我有两个 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、宝瓦2 11、正弦波 12,1 13,260 14,9

那好像有 14 列,你指定 9 列...

您能否编辑您的问题并明确说明这一点? 即指定为 csv SRR6691737.359236/0_14228//11999_12313,Censor,repeat,5,.....

添加信息,反馈后: file1 包含以下字段(tab-, ancd 分隔):

    SRR6691737.359236/0_14228//11999_12313 审查员 5 264 1169 + . 重复 BOVA2 SINE 1 260 9

您想将此(使用脚本)转换为制表符分隔的文件:

    CM011822.1 冷藏 距离 63738705 63738727 + . 读SRR6691737.359236 11999 12313 重复 277

需要更多信息来解决这个问题!

字段 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 ?,并根据需要更改脚本。

【讨论】:

为了清楚起见,我把列的 csv 格式: file1: SRR6691737.359236/0_14228//11999_12313 ;审查员;重复 ; 5; 264;第1169章+ ; . ;重复 BOVA2 SINE 1 260 9 文件 2:CM011822.1;冷藏车;不和谐; 63738705; 63738727; . ; + ; . ;阅读SRR6691737.359236 11999 12313; Dup 277 我没有任何编码经验,但想将 file2 更改为:CM011822.1;冷藏车;不和谐; 63738705; 63738727; . ; + ; . ;读取SRR6691737.359236/0_14228//11999_12313;重复 277 。我的意思是,脚本从 file1 中找到匹配的文件名并修改 file2 @ManiGhanipoorSamami:你的问题不清楚。我添加了信息/问题,应该清楚地表明这个问题“不好”。缺少信息,无法给出答案。 SO 不是为了提供解决方案,而是为了帮助他人创建自己的解决方案。 ? 我不想将 file1 转换为 file2。我想将 file2 的第 8 个字段从“读取 SRR6691737.359236 11999 12313”更改为“读取 SRR6691737.359236/0_14228//11999_12313”。 file2 的其他字段保持不变。对于我展示的 file2 的第一行,我需要一个脚本,在 file1 中找到“SRR6691737.359236”和“11999_12313”匹配项,并将“0_14228”从 file1 添加到 file2 的第 8 列,格式如下:“Read SRR6691737. 359236/0_14228//11999_12313"。 感谢@LUUK,您的脚本生成了这个输出(生成了几十个):“1 SRR6691737.359236 11999 12313 .... SRR6691737.359236/0_14228//11999_12313”,但我想要输出采用这种格式:“CM011822.1;冷藏;不一致;63738705;63738727;.;+;..;阅读 SRR6691737.359236/0_14228//11999_12313;Dup 277”(我希望它是 tsv,我将其设为 csv在这里使单独的列清晰)。 IE。我只想更改 file2 的第 9 列。我正在学习 awk,但很快就需要这个结果,如果你能帮我解决这个问题,我将不胜感激。 I am learning awk,请阅读:***.com/questions/20844666/…

替换多个文件中的多个字符串

】替换多个文件中的多个字符串【英文标题】:Replacingmultiplestringsinmultiplefiles【发布时间】:2019-01-0713:03:27【问题描述】:我有一个文件,其中包含以下格式的正则表达式列表和替换文字字符串:OLD_REGEXP_1NEW_STRING_1OLD_REGEXP_2NEW_ST... 查看详情

我们如何在匹配两个文本文件时查找和替换单词?

】我们如何在匹配两个文本文件时查找和替换单词?【英文标题】:Howcanwefindandreplacewordswhilematchingtwotextfiles?【发布时间】:2021-11-0722:42:46【问题描述】:我有两个不同格式的单词数据库,用于两个不同的词典。其中一个包含每... 查看详情

一个字符串中替换多个字符怎么做

js中提供了replace方法进行字符串替换:replace()replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。stringObject.replace(regexp/substr,replacement)regexp/substr是规定的子字符串或要替换的模式的RegExp... 查看详情

当一个字符不是使用前缀的文件名中的前 8 个字符之一时,如何查找和替换字符?

...字符不是使用前缀的文件名中的前8个字符之一时,如何查找和替换字符?【英文标题】:HowdoIfindandreplaceacharacterwhenitisnotoneofthefirst8charactersinthefilenameusingprename?【发布时间】:2021-04-0713:12:08【问题描述】:这将例如递归地查找所... 查看详情

查找和替换文件中的单词/行

...代码中的某些行并替换它们。例如,在文件中有一个文本字符串,指示它存储的目录或记录器的级别。我希望能够在不读取文件、将其写入另一个文件并删除原始文件的情况下替换这些文本字符串。有没有更有效的 查看详情

在js中,如何替换一个文本中的多个字符?

...表达式才可以解决这个问题呢?js中提供了replace方法进行字符串替换:replace()replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。stringObject.replace(regexp/substr,replacement)regexp/substr是规定的... 查看详情

如何用python查找和替换json文件中的特定字符串

】如何用python查找和替换json文件中的特定字符串【英文标题】:Howtofindandreplaceaspecificstringinajsonfilewithpython【发布时间】:2022-01-1103:39:59【问题描述】:使用python程序,我将一个ics文件保存到一个json文件中。json文件包含日历信... 查看详情

计算文件中与 String [ ] 中的单词匹配的单词

...经让代码工作到一定程度。我把我想计算的单词放在一个字符串[]中。问题是程序要么计算文件中所有单词的出现次数(包括我不想计算的单词),要么计算字符串[]中 查看详情

递归查找和替换文件中的字符串,为受影响的文件创建备份

】递归查找和替换文件中的字符串,为受影响的文件创建备份【英文标题】:Findandreplacestringinfilesrecursively,createbackupforaffectedfiles【发布时间】:2016-11-1810:53:18【问题描述】:我想在几个文件中查找字符串“foo”并将其替换为“br... 查看详情

替换从字符开始并以另一个字符结束的文本文件中的子字符串

】替换从字符开始并以另一个字符结束的文本文件中的子字符串【英文标题】:Replacesubstringinsideatextfilestartingfromcharacterandendingwithanothercharacter【发布时间】:2020-02-2903:04:29【问题描述】:我是使用批处理脚本的新手,我遇到了这... 查看详情

myeclipse的ctrl+f搜索面板功能详解

...索汉字,即搜索/替换汉字时不要勾选此项;此外,替换字符串中的部分子字符串也不能勾选此项。Incremental:增量匹配(输入实时匹配),在关键词输入框里增加输入时会实时匹配(需要修改搜索/替换时选用)Regularexpressions:... 查看详情

查找一个字符串是不是与另一个字符串匹配

】查找一个字符串是不是与另一个字符串匹配【英文标题】:Findwhetherastringmatchesanotherstring查找一个字符串是否与另一个字符串匹配【发布时间】:2013-05-1612:26:03【问题描述】:我想解析一个字符串,看看它是匹配整个字符串还... 查看详情

使用grep和sed递归查找和替换所有文件中的字符串[重复]

】使用grep和sed递归查找和替换所有文件中的字符串[重复]【英文标题】:FindandReplacestringinallfilesrecursiveusinggrepandsed[duplicate]【发布时间】:2013-04-0123:10:15【问题描述】:我得到了一个sed:-eexpression#1,char22:unterminated`s\'command我的脚本... 查看详情

使用 .bat 文件在目录中包含的多个文件中查找和替换字符串

】使用.bat文件在目录中包含的多个文件中查找和替换字符串【英文标题】:Findandreplaceastringwithinmultiplefilescontainedwithinadirectoryusinga.batfile【发布时间】:2021-10-1112:11:17【问题描述】:我的目标是搜索一个包含在一个目录中的多个.... 查看详情

仅在匹配的字符串行中替换文件中的字符

】仅在匹配的字符串行中替换文件中的字符【英文标题】:replacecharacterfromfileinmatchedstringslinesonly【发布时间】:2021-05-0115:24:48【问题描述】:我正在尝试在特定字符串匹配的单行中替换文件中的“$”字符。就我而言,我有一个... 查看详情

Perl:在多个文本文件中查找和替换特定字符串

】Perl:在多个文本文件中查找和替换特定字符串【英文标题】:Perl:Findandreplacespecificstringinmultipletextfile【发布时间】:2013-11-2812:13:05【问题描述】:我需要获取给定目录中的所有.config文件,并且在每个文件中我需要搜索特定字... 查看详情

在多个目录中的文件中查找和替换包含引号的字符串 - unix aix

】在多个目录中的文件中查找和替换包含引号的字符串-unixaix【英文标题】:Findandrepalcestringthatincludesquoteswithinfilesinmultipledirectories-unixaix【发布时间】:2015-04-1805:00:09【问题描述】:所以这就是场景。我想在安装中的100个文件中... 查看详情

查找与模式匹配的文件,替换字符串,然后将输出与原始文件进行比较,命令失败

】查找与模式匹配的文件,替换字符串,然后将输出与原始文件进行比较,命令失败【英文标题】:Findfilesmatchingapattern,replacestringsandthendifftheoutputwithoriginal,commandfails【发布时间】:2021-11-1609:14:32【问题描述】:我正在尝试查找... 查看详情