连接具有特定命名方案的文件对 (UBUNTU)

Concatenating Pairs of Files with Specific Naming Scheme (UBUNTU)

**这里似乎有部分答案,但用户遇到了我遇到的同样问题:保留原始命名方案很重要。

Loop to concatenate multiple pairs of files with almost the same name in UNIX**

我有一个包含配对文件的文件夹;名称如下所示(全部存储在相同的 folder/directory 中):

MX_HF20.1.fq.gz; MX_HF20.rem.1.fq.gz

MX_HF22.1.fq.gz; MX_HF22.rem.1.fq.gz

.

.

.

SD_F296.1.fq.gz; SD_F296.rem.1.fq.gz

SD_F297.1.fq.gz; SD_F297.rem.1.fq.gz

(有些人可能认为这是 STACKS 输出!)

真的,我只是想将 *.1.rem.fq.gz 文件的内容附加到 *.1.fq.gz 文件的末尾,保留原始 *.1.fq.gz文件名。

我玩过测试文件,所以我知道 cat 会执行此操作,即使文件是 .gz。但是我的 bash 脚本编写能力充其量是很差的,使用和存储名称变量是一个我仍在努力掌握的概念。

非常感谢!

也许尝试使用 bash 重赛:

#!/bin/bash

p='([A-Z]+_[A-Z]+)([0-9]+)\.1\.rem\.fq\.gz'

for f in *.gz; do
    if [[ $f =~ $p ]]; then
        cat "${f}" >> "${BASH_REMATCH[1]}${BASH_REMATCH[2]}.1.fq.gz"
    fi
done

例如:

SD_F297.1.rem.fq.gz 将附加到 SD_F297.1.fq.gz

听起来您正在寻找这样的东西:

#!/bin/bash
for file1 in *.1.fq.gz;  do
   file2=`echo $file1 | sed -E 's/(*\.1)\.fq\.gz/.rem.fq.gz/'`
   cat $file1 $file2 > out.$file1
done

反引号执行 shell 命令并将文本结果插入脚本中的那个点

sed 是 unix 中处理文本行的流编辑器

它使用正则表达式,在这种情况下你需要 () 来分组和捕获文件名的第一部分和 \1 来引用它