提取多个列并在其间添加空字符

问题描述 投票:1回答:2

我有一个文件格式如下:

TRINITY_DN119001_c0_g1_i1   4   *   0   0   *   *   0   0   GAGCCTCCCTCATGAATGTACCAGCATTTACCTCATAAAGAGCT    *   XO:Z:NM 
TRINITY_DN119037_c0_g1_i1   4   *   0   0   *   *   0   0   TAAGATTAGGTTGTATTCCAG   *   XO:Z:NM 
TRINITY_DN119099_c0_g1_i1   4   *   0   0   *   *   0   0   AGGCAGGCGCTAAACGATTTGCATTTCTCTAATGATTACGCCAG    *   XO:Z:NM

我试图提取第1和第10列并将其存储为以下格式(输出文件):

>TRINITY_DN119099_c0_g1_i1  
GAGCCTCCCTCATGAATGTACCAGCATTTACCTCATAAAGAGCT    
>TRINITY_DN119037_c0_g1_i1
TAAGATTAGGTTGTATTCCAG
>TRINITY_DN119001_c0_g1_i1  
AGGCAGGCGCTAAACGATTTGCATTTCTCTAATGATTACGCCAG

我现在正在执行以下代码:

cut -d "  " -f1,10 in.txt > out.txt
sed 's/^/>/' out.txt

但是,无法获得如何获得高于输出。

awk sed fasta
2个回答
2
投票

你可以使用awk

awk '{printf ">%s\n%s\n", $1, $10}' file

>TRINITY_DN119001_c0_g1_i1
GAGCCTCCCTCATGAATGTACCAGCATTTACCTCATAAAGAGCT
>TRINITY_DN119037_c0_g1_i1
TAAGATTAGGTTGTATTCCAG
>TRINITY_DN119099_c0_g1_i1
AGGCAGGCGCTAAACGATTTGCATTTCTCTAATGATTACGCCAG

但请注意,它显示的是输出中的第1列和第10列,而不是第9列。


0
投票

如果你的数据在'd'文件中,请尝试gnu sed:

 sed -E 's/^(TRINITY_DN\S+).*\s([ACGT]+).*/\1\n\2/' d
© www.soinside.com 2019 - 2024. All rights reserved.