Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python脚本中的-cat连接文件_Python_Bash - Fatal编程技术网

通过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"