【问题标题】:In a fastq file, how do I change the sequence headers to the file name and a unique identifier?在 fastq 文件中,如何将序列头更改为文件名和唯一标识符?
【发布时间】:2020-10-14 23:52:48
【问题描述】:

我正在处理带条形码的数据,我希望能够组合 fastq 文件并轻松判断读取的原始条形码是哪个条形码。所以我试图将读取的名称更改为文件的名称(即barcode01.fastq)并在末尾附加一个唯一编号。我希望最终产品是这样的:

> barcode01_1
AAGTAGCCTTCGTTCAGTTACGTATTG
+
(&)(*),+*)'(5<64?CA?<;A=@D6
> barcode01_2
...

到目前为止,我有以下使用 awk:

find . -type f -printf "/%P\n" | \
    while read FILE ; 
        do 
            PREFIX=$(echo ">",${FILE##*/}"_");
            awk -v PREFIX=$PREFIX '{
                if (NR%4 == 1) 
                    print PREFIX, ++i;
                else 
                    print $0
            }' ${FILE} > ../${FILE}.fastq;
    done 

这会从子目录中获取所有 fastq 文件并生成标题 &gt; barcode01_ 1 但我不知道如何摆脱空间。如果我删除PREFIX++i 之间的逗号:

find . -type f -printf "/%P\n" | \
    while read FILE ; 
        do 
            PREFIX=$(echo ">",${FILE##*/}"_");
            awk -v PREFIX=$PREFIX '{
                if (NR%4 == 1) 
                    print PREFIX ++i;
                else 
                    print $0
            }' ${FILE} > ../${FILE}.fastq;
    done

这使得标题仅增加数字而没有&gt; barcode01_ 部分。

【问题讨论】:

  • 尝试使用printf 而不是print

标签: bash awk fastq


【解决方案1】:

++ 推到i 上并不意味着awk 会将其应用于i 而不是PREFIX。比较:

$ awk 'BEGIN{PREFIX="foo"; print PREFIX ++i}'
0

与:

$ awk 'BEGIN{PREFIX="foo"; print PREFIX (++i)}'
foo1

您的脚本还有其他几个问题,请将其复制/粘贴到 http://shellcheck.net 以了解其中一些问题,然后如果您需要其他问题的帮助,请发布一个新问题。

【讨论】:

  • 那行得通。感谢您的解释和链接。
猜你喜欢
  • 2015-06-11
  • 1970-01-01
  • 2012-04-25
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多