问题描述
我正在处理条形码数据,我希望能够合并fastq文件,并能够轻松分辨出读取的原始条形码。所以我试图将读取的名称更改为文件的名称(即条形码01.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文件,并使文件头为> 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
这使得标头仅增加数字而没有> barcode01_
部分。
解决方法
将++
推到i
上并不意味着awk会将其应用于i
而不是PREFIX
。比较:
$ awk 'BEGIN{PREFIX="foo"; print PREFIX ++i}'
0
具有:
$ awk 'BEGIN{PREFIX="foo"; print PREFIX (++i)}'
foo1
您的脚本还有其他问题,请将其复制/粘贴到http://shellcheck.net中以了解其中的一些问题,然后在您需要其他帮助时发布新的问题。