我有一个文件,需要在行开头的最后一个匹配项(3 位数字)之后附加一行(以及几个字符)。数据按(许多)基因编号(122,239,...)分组,每个基因可能有不同数量的个体。
cat test
122_mex1 TGCAGGC
122_mex2 TGCAGTC
122_mex3 TGCAGTC
122_can4 TGCATTT
239_mex1 TGCAAAA
239_mex2 TGCAAAA
239_can4 TGCAGCA
...
567_can4 TGCAAAT
输出应如下所示:
cat output
122_mex1 TGCAGGC
122_mex2 TGCAGTC
122_mex3 TGCAGTC
122_can4 TGCATTT
//|1
239_mex1 TGCAAAA
239_mex2 TGCAAAA
239_can4 TGCAGCA
//|2
etc.
那么如何找到每行开始的每个基因编号的最后一个匹配项,并在一行中附加一些字符,向上计数(1、2、3等)?
我找到了一种在提供的匹配项后附加一行的方法(例如 122)
awk '/122/{seen++} seen && !/122/{print "//|1"; seen=0} 1' test
但我喜欢附加所有基因编号(122、239、455、234 等),循环基因并将每个连续的基因编号附加到以下行“//i”上。
关于如何开始这个有什么想法吗?
谢谢!
最佳答案
这就能解决问题:
$ awk -F_ 'NR>1 && last!=$1{print "//|"++i}{last=$1}1' test
122_mex1 TGCAGGC
122_mex2 TGCAGTC
122_mex3 TGCAGTC
122_can4 TGCATTT
//|1
239_mex1 TGCAAAA
239_mex2 TGCAAAA
239_can4 TGCAGCA
//|2
...
//|3
567_can4 TGCAAAT
要保存结果,请使用 shell 重定向:
$ awk -F_ 'NR>1 && last!=$1{print "//|"++i}{last=$1}1' test > output
关于regex - 在最后一个匹配后添加一行和字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29544559/