合并 ID 在下划线之前的文件
Merge files with ID before underscore
我正在寻找一种方法来合并文件名中第一个下划线之前具有相同 ID 的文件。输出应仅包含 ID,后跟 fastq.gz。必须对输出进行 gzip 压缩。
在
0394_L007_R1.fastq.gz
0394_L008_R1.fastq.gz
0444_L005_R1.fastq.gz
0444_L006_R1.fastq.gz
出来
0394.fastq.gz
0444.fastq.gz
比
更方便的东西
cat 0394_L007_R1.fastq.gz 0394_L008_R1.fastq.gz > 0394.fastq.gz
首先,在关联数组中收集唯一标识符:
declare -A ids
for f in *.fastq.gz; do
ids[${f%%_*}]=1
done
然后使用 gzcat
将每个文件的(未压缩的)内容通过管道传输
将文件匹配到 gzip
以将输出重新压缩到单个文件中。
for id in "${!ids[@]}"; do
gzcat "$id"_*.fastq.gz | gzip -c > "$id".fastq.gz
done
(或者,因为我忘记了串联的 Gzip 文件本身就是有效的 Gzip 文件,
for id in "${!ids[@]}"; do
cat "$id"_*.fastq.gz > "$id".fastq.gz
done
)
使用一个简单的命令:
ls | tr '_' '.' |切-d'。' -f1,4,5 | uniq
一个不断附加到目标文件的简单循环。所以这实际上只是为当前文件找到正确的 "target file" 并附加到它的问题。
#! /bin/bash
for x in *.fastq.gz; do
currid=$(echo "$x" | cut -d'_' -f1)
cat "$x" >> "$currid".fastq.gz
done
我正在寻找一种方法来合并文件名中第一个下划线之前具有相同 ID 的文件。输出应仅包含 ID,后跟 fastq.gz。必须对输出进行 gzip 压缩。
在
0394_L007_R1.fastq.gz
0394_L008_R1.fastq.gz
0444_L005_R1.fastq.gz
0444_L006_R1.fastq.gz
出来
0394.fastq.gz
0444.fastq.gz
比
更方便的东西cat 0394_L007_R1.fastq.gz 0394_L008_R1.fastq.gz > 0394.fastq.gz
首先,在关联数组中收集唯一标识符:
declare -A ids
for f in *.fastq.gz; do
ids[${f%%_*}]=1
done
然后使用 gzcat
将每个文件的(未压缩的)内容通过管道传输
将文件匹配到 gzip
以将输出重新压缩到单个文件中。
for id in "${!ids[@]}"; do
gzcat "$id"_*.fastq.gz | gzip -c > "$id".fastq.gz
done
(或者,因为我忘记了串联的 Gzip 文件本身就是有效的 Gzip 文件,
for id in "${!ids[@]}"; do
cat "$id"_*.fastq.gz > "$id".fastq.gz
done
)
使用一个简单的命令:
ls | tr '_' '.' |切-d'。' -f1,4,5 | uniq
一个不断附加到目标文件的简单循环。所以这实际上只是为当前文件找到正确的 "target file" 并附加到它的问题。
#! /bin/bash
for x in *.fastq.gz; do
currid=$(echo "$x" | cut -d'_' -f1)
cat "$x" >> "$currid".fastq.gz
done