从文件列表中连接每个其他文件
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
file1
、file2
等内容只是你要拼接的文件名,所以还需要一层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 文件放在一起并且生成的文件仍然“有效”,但这对我来说确实有效,所以我也学到了一些东西。
我有一个文件列表:
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
file1
、file2
等内容只是你要拼接的文件名,所以还需要一层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 文件放在一起并且生成的文件仍然“有效”,但这对我来说确实有效,所以我也学到了一些东西。