从文件列表中连接每个其他文件

Concatenating every other file from a list of files

我有一个文件列表:

MD5.txt

8530362a272d04efef64b7f1ae0d1069  NGS35_FKDN210261811-1A_H3YNKDSX2_L4_1.fq.gz
9b34bdbbb17cdb1205035e24124fed1a  NGS35_FKDN210261811-1A_H3YNKDSX2_L4_2.fq.gz
00f8f992334458383fc1a5c7b06d403e  NGS35_FKDN210261811-1A_H5JY3DSX2_L4_1.fq.gz
cca0e17b3dcc1e644ec1a9a4a60a851e  NGS35_FKDN210261811-1A_H5JY3DSX2_L4_2.fq.gz

我想像这样连接第一个和第三个文件以及第二个和第四个文件:

cat NGS35_FKDN210261811-1A_H3YNKDSX2_L4_1.fq.gz NGS35_FKDN210261811-1A_H5JY3DSX2_L4_1.fq.gz >NGS35_L4_1.fq.gz

cat NGS35_FKDN210261811-1A_H3YNKDSX2_L4_2.fq.gz NGS35_FKDN210261811-1A_H5JY3DSX2_L4_2.fq.gz >NGS35_L4_2.fq.gz

到目前为止我已经了解了,但我无法将实际文件连接在一起,而只是连接文件名...

#get files names
awk -v OFS="\t" '=' MD5.txt | cut -f2 > tmp

#get sample ID
ID=$(sed 's/_.*//' tmp | head -1)

#get lines needed
sed '1q;d' tmp > file1
sed '3q;d' tmp > file2

sed '2q;d' tmp > file3
sed '4q;d' tmp > file4

#Cat files together - this doesn't work!!
cat file1 file2 > ${ID}_L4_1.fq.gz
cat file1 file2 > ${ID}_L4_2.fq.gz

rm file* tmp

我确定可能只有一个班轮......放轻松,我是临床医生而不是生物信息学家!

我有一个解决方案,但我相信还有一个更优雅的解决方案..!

#!/bin/bash

#get file names
awk -v OFS="\t" '=' MD5.txt | cut -f2 > tmp

#get sample ID
ID=$(sed 's/_.*//' tmp | head -1)

#get lines needed
file1=$(sed '1q;d' tmp)
file2=$(sed '3q;d' tmp)

file3=$(sed '2q;d' tmp)
file4=$(sed '4q;d' tmp)

#car files together
cat $file1 $file2 > ${ID}_L4_1.fq.gz
cat $file1 $file2 > ${ID}_L4_2.fq.gz

rm tmp

file1file2等内容只是你要拼接的文件名,所以还需要一层cat才能得到内容。

#!/bin/bash

#get files names
awk -v OFS="\t" '=' MD5.txt | cut -f2 > tmp

#get sample ID
ID=$(sed 's/_.*//' tmp | head -1)

#get lines needed
cat $(sed '1q;d' tmp) $(sed '3q;d' tmp) > ${ID}_L4_1.fq.gz
cat $(sed '2q;d' tmp) $(sed '4q;d' tmp) > ${ID}_L4_2.fq.gz

rm  tmp

顺便说一句,令我惊讶的是您能够将 .gz 文件放在一起并且生成的文件仍然“有效”,但这对我来说确实有效,所以我也学到了一些东西。