簡體   English   中英

單引號內的單引號-Bash命令行GNU parallel

[英]Single quotes within single quotes issue - Bash command line GNU parallel

我是Bash命令行使用的新手,並且需要知道在現有單引號內執行單引號的正確語法。

ls *file.fa | parallel -j4 'perl -pe 's/^>/>{}/' {} >newfile_{}'

我知道GNU並行命令並不是特別為人所知或使用,但我認為對於需要在單引號內使用單引號的不同命令,語法不會有所不同。 命令是在名為file.fa的文件中將>更改為> file.fa(>然后是文件名),其中{}合並了從ls * file.fa節中管道傳輸的文件。

任何幫助深表感謝

用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM