这是我要编辑的文件的摘录:
>chr1|-|9|S|somatic ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG >chr1|+|9|Y|somatic ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG
我想要一个新的文本文件,在“>”之前和“somatic”之后或“germline”之后添加换行符,在 R 或 Unix 中该怎么办?
预期输出:
>chr1|-|9|S|somatic
ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG
>chr1|+|9|Y|somatic
ACCACAGCCCTGTTTTACGTTGCGTCATCGCCCCGGGTGCCTGGTGACGTCACCAGCCCGCTCG
最佳答案
根据您输入的外观,您可以简单地用换行符替换空格:
tr -s ' ' '\n' <infile >outfile
(某些 tr
方言不喜欢 \n
。尝试 '\012'
或文字换行符:左引号、换行符、收盘价。)
如果这不起作用,您可以在 sed
中轻松完成此操作。如果体细胞
是静态的,只需对其进行硬编码:
sed -e 's/somatic */&\n/g' -e 's/ >/\n>/g' file >newfile
关于不同 sed
方言的常见警告适用。有些版本不喜欢 \n
作为换行符,有些版本需要换行符或分号而不是多个 -e
参数。
在 Linux 上,您可以就地修改文件:
sed -i 's/somatic */&\
/g
s/ >/\
/g' file
(对于变化,我将展示如果您的 sed
无法识别 \n
但允许文字换行符,如何执行此操作,以及如何将脚本放入单个多行字符串。)
在 *BSD(包括 MacOS)上,您始终需要向 -i
添加参数; sed -i '' ...
如果 somatic
是可变的,但您总是想替换楔形后面的第一个空格,请尝试类似的操作
sed 's/\(>[^ ]*\) /\1\n/g'
>[^ ]
匹配楔形后跟零个或多个非空格字符。括号将匹配的字符串捕获到 \1
中。同样,某些 sed 变体不需要在括号前面有反斜杠,或者只是……不同。
如果您的行很长,您可能会遇到有问题的 sed
。也许可以尝试 Perl。 (幸运的是,不用担心方言!)
perl -i -pe 's/(>[^ ]*) /$1\n/g;s/ >/\n>/g' file
(如果您不想修改输入文件,请跳过-i
选项。然后输出将是标准输出。)
关于regex - 如何在文本文件中的正则表达式之前和之后添加换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885205/