合并名称相同但代码不同的文件- UNIX

lymnna71  于 2023-06-22  发布在  Unix
关注(0)|答案(1)|浏览(143)

我想合并的文件有相同的部分相同:

XX_barcode2_XX.fastq
XX_barcode2_XX.fastq
XX_barcode3_XX.fastq
XX_barcode3_XX.fastq
XX_barcode4_XX.fastq
XX_barcode4_XX.fastq

因此,我想要一个用于barcode2的文件,一个用于barcode3的文件等。
我在尝试这个:

for i in {2 .. 96};
do
   cat *_barcode$i*.fastq >> barcode$i.fastq;
done

但它不起作用。有什么想法吗

qgzx9mmu

qgzx9mmu1#

我会这样做:

#!/bin/bash

echo "file2 A" > XX_barcode2_XX.fastq
echo "file2 B" > XX_barcode2_YY.fastq
echo "file3 A" > XX_barcode3_XX.fastq
echo "file3 B" > XX_barcode3_YY.fastq
echo "file4 A" > XX_barcode4_XX.fastq
echo "file4 B" > XX_barcode4_YY.fastq

for i in {2..96}
do
    echo "i=$i"
    if find . -name "*_barcode$i*.fastq"
    then
        echo "in if"
        cat "*_barcode$i*.fastq" >> "barcode$i.fastq"
    fi
done
  • 脚本的顶部只是为了创建文件供我测试。
  • if find ...只处理存在的文件。否则,它将创建空文件5到96。如果不需要,您可以删除它。
  • 如果不需要调试消息,可以删除echo语句。
  • 在你的for循环中,你在{2 .. 96}周围放了空格,bash对错误位置的空格非常挑剔。
  • 你可以在发布前使用https://www.shellcheck.net/验证你的语法。
  • ;不需要结束行,这不是C:)

相关问题