通过-cat从Python脚本连接文件

时间:2017-07-24 14:37:55

标签: python bash

我有一个文件夹,里面的文件名是这样的:

"Code1_B1_1.1.fq.gz"
"Code1_B1_2.2.fq.gz"
"Code1_B2_1.1.fq.gz"
"Code1_B2_2.2.fq.gz"
...
"Code5_B1_1.1.fq.gz"
"Code5_B1_2.2.fq.gz"
"Code5_B2_1.1.fq.gz"
...
...

这些是DNA序列。我想根据代码编号和扩展名连接这些文件。因此,例如,我的文件“Code1_B1_1.1.fq.gz”和“Code1_B2_1.1.fq.gz”将合并为一个“Code1_both_1.1.fq.gz”。

使用bash(作为新手),我发现了如何列出我需要连接的文件,例如:

ls | grep -E "Code1.*.1.1.fq.gz"

但是我怎样才能将它们连接起来?我想简单地使用命令-cat并将输出保存到新文件中,但是如何检索我能够用-ls列出的文件?

...最后,我想从Python脚本中执行整个操作,根据我的两个条件(代码和扩展名)自动合并我的所有文件。:)

提前感谢您的帮助!

Chrys

2 个答案:

答案 0 :(得分:1)

ls输出供人类使用,而不是程序化消费;见Why you shouldn't parse the output of ls

而是使用glob expression形成文件名列表:

zcat Code1*1.1.fq.gz >outfile

...或...

gunzip -c Code1*1.1.fq.gz >outfile

如果由于某种原因需要引用此名称的部分内容,只要您引用*(或任何其他glob-expression),您就可以这样做元字符):

gunzip -c "Code1"*"1.1.fq.gz"

请注意,glob表达式与正则表达式略有不同:在正则表达式中,.是一个特殊字符 - 因此grep -E "Code1.*.1.1.fq.gz"也会将Code1AB1C1DfqEgz与有效名称匹配,因为每个并且表达式中的每个.都以这种方式处理。在globs中,.并不特殊,*意味着零或多任何东西(而不是最后一个零或更多)

答案 1 :(得分:0)

尝试列出所有文件,然后grep查找所需的文件并将其存储在文件中。

ls -ltra | egrep -e'Code1_B1_1.1.fq.gz | Code1_B1_2.2.fq.gz | Code1_B2_1.1.fq.gz | Code1_B2_2.2.fq.gz'>文件名

OR

ls | zip - @ m filename.zip