ale*_*lex 2 sed bioinformatics
我有一个看起来像这样的文件:
chr1 3143567 3143568 .3-2704 1.000000|ENSMUSG00000102693.2
chr1 3143599 3143600 .3-2705 1.000000|ENSMUSG00000102693.2
chr1 3143631 3143632 .3-2706 1.000000|ENSMUSG00000102693.2
chr1 3143663 3143664 .3-2707 1.000000|ENSMUSG00000102693.2
chr1 3143695 3143696 .3-2708 1.000000|ENSMUSG00000102693.2
chr1 3143727 3143728 .3-2709 1.000000|ENSMUSG00000102693.2
Run Code Online (Sandbox Code Playgroud)
我正在编写 2 个 sed 表达式来过滤|
第一个表达式之前的所有内容,并且对于结果文件,我会丢弃之后的所有内容,.
如下所示:
sed -n -e 's/^.*|//p' original_file.txt > first_result.txt
sed -n -e 's/\..*//p' first_result.txt > final_result.txt
我怎样才能将所有这些写在一行中?
最终目标是捕获ENSMUSG00000102693
您的命令将丢弃不包含|
字符的行以及鼠标基因标识符没有版本号的行。sed -n
我不确定这是有意的,但这是与p
标记一起使用的副作用s
。我假设这是无意的。
只需使用两个表达式sed
:
sed -e 's/.*|//' -e 's/\..*//' file >newfile
Run Code Online (Sandbox Code Playgroud)
使用grep
具有非标准-o
选项的命令,并假设您只想从文件中提取所有 Ensembl 小鼠基因稳定 ID(并且该文件仅包含您想要提取的稳定 ID),
grep -o 'ENSMUSG[[:digit:]]*' file >newfile
Run Code Online (Sandbox Code Playgroud)
您还可以使用两个链接cut
命令,每个命令都会对数据进行与sed
本答案前面的两个替换类似的修改。使用静态剪切可能比使用正则表达式更快,但我怀疑除非您的输入数据很大,否则您不会看到任何重大的速度差异。
cut -d '|' -f 2 file | cut -d '.' -f 1 >newfile
Run Code Online (Sandbox Code Playgroud)