linux - 在linux中将tab转换为fasta格式

标签 linux bash awk sed bioinformatics

我有文本 (infile-table.txt) 文件,其中有两列由制表符分隔,如下所示:

TRINITY_DN5561_c0_g1_i1 len=391 path=[369:0-390] [-1, 369, -2]  TTGGCTGGAATTCAAAAGCTTTCGATT
TRINITY_DN15396_c0_g1_i1 len=235 path=[213:0-234] [-1, 213, -2] CGAGCTTGGGTAAATGGGATCAAACTAGATTA
len=298 path=[1:0-297] [-1, 1, -2]  GCTGTGATTTCTGCCATCGGAGAGGGCACAGACGGC

我想像这样转换它们:

>TRINITY_DN5561_c0_g1_i1 len=391 path=[369:0-390] [-1, 369, -2] 
TTGGCTGGAATTCAAAAGCTTTCGATT
>TRINITY_DN15396_c0_g1_i1 len=235 path=[213:0-234] [-1, 213, -2]    
CGAGCTTGGGTAAATGGGATCAAACTAGATTA
>len=298 path=[1:0-297] [-1, 1, -2] 
GCTGTGATTTCTGCCATCGGAGAGGGCACAGACGGC

我尝试过但不起作用的命令:

awk '{printf ">%s\n%s\n",$1,$2}' infile-table.txt > outfile.fasta

最佳答案

您只是缺少“制表符分隔”位:

awk -F '\t' '{printf ">%s\n%s\n",$1,$2}' infile-table.txt
#...^^^^^^^

如果您愿意,awk 程序可以变得更简洁:将输出字段分隔符设置为换行符并且:

awk -F'\t' -v OFS='\n' '{$1 = ">" $1} 1' infile-table.txt 

当您更改第一个字段时,awk 将使用 OFS 重新创建 $0,并且末尾的“1”将打印该记录。

而且,由于您添加了 标签:

sed 's/^/>/;s/\t/\n/' infile-table.txt

关于linux - 在linux中将tab转换为fasta格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788098/

相关文章:

linux - 将系统上所有 git 存储库的远程从 http 更改为 ssh

linux - ubuntu 启动时如何运行应用程序?

python - 从包含组的文件中取出每第 n 行,n 是在列中给定的

awk 部分字符串匹配(如果列/单词部分匹配)

linux - AWK如何计算累计和并在超过预定义整数后停止?

linux - 访问linux虚拟内存

条件变量信号问题

linux - Shell编码遇到段错误

bash - 在 Bash 中创建互斥锁时,我应该使用 `flock` 还是 `mkdir` ?

php - Shell Cron 错误 - 什么可能导致此错误?