【问题标题】:How to add character at the end of specific line in UNIX/LINUX?如何在 UNIX/LINUX 中特定行的末尾添加字符?
【发布时间】:2021-08-24 23:12:14
【问题描述】:

这是我的输入文件。我想在行首有“>”的行的末尾添加一个字符“:”。我尝试了seq -i 's|$|:|' input.txt,但“:”被添加到每行的所有结尾。也很难说出特定的行号,因为在我的每个输入文件中,该行包含“>”以不同的行号出现。我想为多个文件运行一个循环,所以它没用。

>Pas_pyrG_2
AAAGTCACAATGGTTAAAATGGATCCTTATATTAATGTCGATCCAGGGACAATGAGCCCA
TTCCAGCATGGTGAAGTTTTTGTTACCGAAGATGGTGCAGAAACAGATCTGGATCTGGGT
>Pas_rpoB_4
CAAACTCACTATGGTCGTGTTTGTCCAATTGAAACTCCTGAAGGTCCAAACATTGGTTTG
ATCAACTCGCTTTCTGTATACGCAAAAGCGAATGACTTCGGTTTCTTGGAAACTCCATAC
CGCAAAGTTGTAGATGGTCGTGTAACTGATGATGTTGAATATTTATCTGCAATTGAAGAA
>Pas_cpn60_2
ATGAACCCAATGGATTTAAAACGCGGTATCGACATTGCAGTAAAAACTGTAGTTGAAAAT
ATCCGTTCTATTGCTAAACCAGCTGATGATTTCAAAGCAATTGAACAAGTAGGTTCAATC
TCTGCTAACTCTGATACTACTGTTGGTAAACTTATTGCTCAAGCAATGGAAAAAGTAGGT
AAAGAAGGCGTAATCACTGTAGAAGAAGGCTCAGGCTTCGAAGACGCATTAGACGTTGTA

这里是专家输出文件:

    >Pas_pyrG_2:
    AAAGTCACAATGGTTAAAATGGATCCTTATATTAATGTCGATCCAGGGACAATGAGCCCA
    TTCCAGCATGGTGAAGTTTTTGTTACCGAAGATGGTGCAGAAACAGATCTGGATCTGGGT
    >Pas_rpoB_4:
    CAAACTCACTATGGTCGTGTTTGTCCAATTGAAACTCCTGAAGGTCCAAACATTGGTTTG
    ATCAACTCGCTTTCTGTATACGCAAAAGCGAATGACTTCGGTTTCTTGGAAACTCCATAC
    CGCAAAGTTGTAGATGGTCGTGTAACTGATGATGTTGAATATTTATCTGCAATTGAAGAA
    >Pas_cpn60_2:
    ATGAACCCAATGGATTTAAAACGCGGTATCGACATTGCAGTAAAAACTGTAGTTGAAAAT
    ATCCGTTCTATTGCTAAACCAGCTGATGATTTCAAAGCAATTGAACAAGTAGGTTCAATC
    TCTGCTAACTCTGATACTACTGTTGGTAAACTTATTGCTCAAGCAATGGAAAAAGTAGGT
    AAAGAAGGCGTAATCACTGTAGAAGAAGGCTCAGGCTTCGAAGACGCATTAGACGTTGTA

seq 是否有更多选项可以修改或者其他命令可以解决这个问题?

【问题讨论】:

  • seq?写出一系列数字的程序?你的意思是sed 流编辑器?

标签: linux unix add seq


【解决方案1】:
sed -i  '/^>/ s/$/:/' input.txt

在输入行中搜索与^> 匹配的行(正则表达式表示“以> 字符开头)。那些执行s替换: 的行结束(你说对了这部分)。

/ 斜杠是sed 中的标准分隔符。如果您想使用不同的字符,请务必传递-es|$|:| 可能不起作用。由于 / 字符与 | 字符不同,在 shell 中不是有意义的字符,因此最好使用它们,除非模式还包含斜杠,在这种情况下会变得笨拙。

小心sed -i。进行备份 - 使用 diff 比较文件,确保您知道发生了什么变化。

在 OSX 上,-i 需要一个参数。

【讨论】:

  • 非常感谢您。我想再问 1 个问题,在这里我想删除“-”左侧的所有字符。我尝试通过计算字符数,但每行的字符数不同:(这是输入 rplB_2-CGTCGTTATATCATTGCGCCTAAAGGCT \n rpoB_4-CAAACTCACTATGGTCGTGTTTGTCCA 预期输出是:CGTCGTTATATCATTGCGCCTAAAGGCT \n CAAACTCACTATGGTCGTGTTTGTCCAA
【解决方案2】:

使用ed编辑文件:

printf "%s\n" 'g/^>/s/$/:/' w | ed -s input.txt

对于以> 开头的每一行,在末尾添加一个冒号,然后w将更改后的文件写回磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2014-05-29
    • 2022-06-11
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多