通过Python脚本中的-cat连接文件
我有一个文件夹,文件夹中的文件名称如下:通过Python脚本中的-cat连接文件,python,bash,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_B
"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_两者_1.1.fq.gz”中
使用bash(作为新手),我了解了如何列出需要连接的文件,例如:
ls | grep-E“Code1.*.1.1.fq.gz”
但之后我如何连接它们呢?我只想简单地使用命令-cat并将输出保存到一个新文件中,但是如何检索能够使用-ls列出的文件呢
。。。此外,最终,我希望通过一个Python脚本来执行整个过程,该脚本将根据我的两个标准(代码和扩展名)自动合并我的所有文件:)
提前感谢您的帮助
Chrys
ls
输出供人使用,而非程序性消费;看
相反,请使用来形成文件名列表:
zcat Code1*1.1.fq.gz >outfile
……或者
gunzip -c Code1*1.1.fq.gz >outfile
如果出于某种原因需要引用此名称的某些部分,只要不引用*
(或任何其他glob表达式元字符),就可以这样做:
请注意,glob表达式与正则表达式有点不同:在正则表达式中,
是一个特殊字符——因此grep-E“Code1.*.1.1.fq.gz”
也将匹配Code1AB1C1DfqEgz
作为有效名称,因为表达式中的每个
都是这样处理的。在globs中,
并不特殊,*
表示任何内容的零个或多个(与最后一个内容的零个或多个相反)尝试列出所有文件,然后搜索所需文件并将其存储在文件中
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.fq.gz'>文件名
或
ls | zip-@m filename.zip(在我的邮件的开头有一个“大家好”,但它不会出现在这里!!很抱歉!因为这是Gzip文件,你不能只使用cat。但是,你可以使用zcat。引号真的是名称的一部分吗?例如,
ls“Code1\u B1\u 1.1.fq.gz”是否显示文件(在这种情况下,引号是语法性的,是shell的指令,而不是文件名的一部分),或者它需要是ls'Code1\u B1\u 1.1.fq.gz'
(在这种情况下,外部引号是语法性的,内部引号是文字性的)?非常感谢大家!Charles,引用不是文件名的一部分,我只是希望它能像这样更清楚:)谢谢!请查看。如果您想列出用于编程的名称,使用printf“%s\n”*
比使用ls
更安全,因为ls
转义不可打印字符的方式不受其规范的定义。即使是printf“%s\n”
也会被名称与文字换行符严重混淆;NUL分隔的st铰(printf“%s\0”*
)是列出完全任意文件名的唯一真正安全的方法。非常感谢您的建议Pranam!非常感谢,我将尝试此方法!祝您度过一个愉快的夜晚!它工作完美,谢谢Charles!很抱歉再次打扰,但现在我想知道如何使用此命令的相对或绝对路径?确实,此命令将由另一个文件夹上的Python脚本启动(工作目录与序列文件列表不同)。再次感谢!我找到了一个解决方案,但不幸的是,发生了一些奇怪的事情。我写了以下内容:zcat.././Folder/Code1*1.1.fq.gz>essai.fq.gz我绝对肯定相对路径是正确的。不过,它返回我没有这样的文件或目录,因此创建了一个空的“essai”你知道问题出在哪里吗?我的命令可以很好地处理我创建的两个小.txt文件,用于进行不同的测试,但是当我返回到序列时,什么都没有:(!printf'%q\n'../../Folder/Code1*1.1.fq.gz
真的打印文件名吗?相对于当前位置,该路径似乎无效。顺便说一句,如果希望输出是另一个.gz
文件,则根本不需要使用zcat
,您可以将一组gzip文件连接在一起生成另一个gzip文件,它会正常工作,所以常规的cat
就可以了。这个命令不会给我文件列表,但是ls.././Folder | grep“Code1.*.1.1.fq.gz”
是的,相对路径与ls和cat的工作方式有什么不同吗?我确信我遗漏了一些明显的东西,但现在这似乎真的很奇怪!再次感谢您的帮助:)
gunzip -c "Code1"*"1.1.fq.gz"