首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从tsv转换为fasta

从tsv转换为fasta
EN

Stack Overflow用户
提问于 2017-06-15 02:53:28
回答 3查看 661关注 0票数 0

我在我的文件夹中有一堆TSV文件,对于其中的每个人,我想得到一个fasta文件,其中符号'>‘之后的标题是文件的名称。我的TSV文件有5列没有标题:

因此:

输入文件名为:"A.coseq.table_headless.tsv“的HIV1B-pol-seed 15 MAX 1959 GTAACAGACTCACAATATGCATTAGGAATCATTCAAGC输出文件名为"A.fasta”

A_MAX

GTAACAGACTCACAATATGCATTAGGAATCATTCAAGC

我想在bash中为所有文件同时运行该脚本,但我有一个无法工作的脚本,因为在awk print语句中,我有一个大括号:

代码语言:javascript
复制
for sample in `ls *coseq.table_headless.tsv`
do
base1=$(basename $sample "coseq.table_headless.tsv")
awk '{print ">"${base1}"_"$3"\n"$5}' ${base1}coseq.table_headless.tsv > ${base1}fasta

done

你知道怎么改正这段代码吗?非常感谢

EN

回答 3

Stack Overflow用户

发布于 2017-06-15 03:39:45

如果基名是直到第一个".“的部分,你也可以摆脱循环。

代码语言:javascript
复制
 awk '{split(FILENAME,base,"."); 
       print ">" base[1] "_" $3 "\n" $5 > base[1]".fasta"}' *coseq.table_headless.tsv
票数 2
EN

Stack Overflow用户

发布于 2017-06-15 05:13:06

另一个awk解决方案:

代码语言:javascript
复制
awk '{ pfx=substr(FILENAME,1,index(FILENAME,".")-1); 
       printf(">%s_%s\n%s\n",pfx,$3,$5) > pfx".fasta" }' *coseq.table_headless.tsv 

  • pfx包含文件名的第一部分(直到第一个.)
票数 0
EN

Stack Overflow用户

发布于 2017-06-15 05:41:24

到目前为止发布的其他解决方案有几个问题:

除非您使用GNU awk,否则

  1. 在写入时不关闭文件将产生“打开的文件太多”错误,
  2. 在每次读取一行而不是打开输入文件时计算输出文件名是低效的,并且
  3. 在输出重定向的右侧使用带括号的表达式是未定义的行为,因此仅适用于某些awk(包括GNU awk)。

这将在所有awks中稳健而高效地工作:

代码语言:javascript
复制
awk '
    FNR==1 { close(out); f=FILENAME; sub(/\..*/,"",f); pfx=">"f"_"; out=f".fasta" }
    { print pfx $3 ORS $5 > out }
' *coseq.table_headless.tsv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44552564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档