我是Bash命令行使用的新手,需要知道在现有单引号中使用单引号的正确语法。
ls *file.fa | parallel -j4 'perl -pe 's/^>/>{}/' {} >newfile_{}'
我知道GNU并行命令并不是特别熟知或使用,但我不认为对于需要单引号内单引号的不同命令,语法会有所不同。命令是改变> to> file.fa(>然后是文件名),名为file.fa,其中{}包含从ls * file.fa部分传输的文件。
非常感谢任何帮助
答案 0 :(得分:2)
引用GNU Parallel是一种黑色艺术。手册中有一整节专门介绍它:http://www.gnu.org/software/parallel/man.html#QUOTING
结论:为了避免处理引用问题,可能更容易编写一个小脚本或函数(记得导出-f函数)并使GNU 并行强>打电话给。
在这种情况下,我会写一个函数:
fasta_namer() {
NAME=$1
perl -pe "s/^>/>$NAME/" "$NAME" >newfile_"$NAME"
}
export -t fasta_namer
ls *file.fa | parallel -j4 fasta_namer {}
FASTA文件名通常不奇怪,但如果它们是(例如包含'" \ *& /或其他疯狂的字符),那么这可能会解决它:
fasta_namer() {
NAME=$1
PERLQUOTED=$2
NEWNAME=$3
perl -pe "s/^>/>$PERLQUOTED/" "$NAME" >"$NEWNAME"
}
export -t fasta_namer
ls *file.fa | parallel -j4 fasta_namer {} '{=$_=quotemeta($_)=}' {.}.new.fa