Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash 对具有匹配字符串的一对文件(不同的文件类型)运行命令_Bash_Cat_Seq_Gnu Parallel - Fatal编程技术网

Bash 对具有匹配字符串的一对文件(不同的文件类型)运行命令

Bash 对具有匹配字符串的一对文件(不同的文件类型)运行命令,bash,cat,seq,gnu-parallel,Bash,Cat,Seq,Gnu Parallel,我有一个文件列表: catfish.fa polar.fa catfish.ids.txt polar.ids.txt 我想用匹配的字符串为每个文件运行这个命令。例如,我想运行以下程序: cat catfish.fa | seqkit grep-f catfish.ids.txt>catfish.output.fa 同样地 cat polar.fa | seqkit grep-f polar.ids.txt>polar.output.fa 如何为目录中的每个文件对并行运行此命令?谢谢你的帮助

我有一个文件列表:

catfish.fa
polar.fa
catfish.ids.txt
polar.ids.txt
我想用匹配的字符串为每个文件运行这个命令。例如,我想运行以下程序:

cat catfish.fa | seqkit grep-f catfish.ids.txt>catfish.output.fa

同样地

cat polar.fa | seqkit grep-f polar.ids.txt>polar.output.fa

如何为目录中的每个文件对并行运行此命令?谢谢你的帮助

与bash的:

filename=${f%.*}提取不带扩展名的文件名,有关说明,请参阅。 if的目的是仅挑出以.fa结尾的文件,这些文件具有相应的.ids.txt文件。
如果希望在每一对上并行运行所有内容,请在cat${f}.fa的末尾附加一个&。。。文件注意不要生成太多并行任务

这将为每个CPU核心并行运行一个作业:

parallel 'cat {} | seqkit grep -f {.}.ids.txt > {.}.output.fa' ::: *fa
我可以建议你先用-dry-run跑步吗,这样你就可以知道要跑什么了

parallel --dry-run 'cat {} | seqkit grep -f {.}.ids.txt > {.}.output.fa' ::: *fa

还考虑花20分钟阅读第1章+ 2本书GNU并列2018打印:在线:。您的命令行会喜欢您的。

感谢您提供的优秀资源。当我尝试此操作时,终端仅返回一个>。我正在使用macOS,已安装并行命令。缺少End。修正了。是的,我一直看着它,感觉好像它缺了一个。谢谢你的帮助,你的书好极了。我会花时间学习它。
parallel 'cat {} | seqkit grep -f {.}.ids.txt > {.}.output.fa' ::: *fa
parallel --dry-run 'cat {} | seqkit grep -f {.}.ids.txt > {.}.output.fa' ::: *fa