gnu并行中的两对双引号冲突

时间:2012-04-09 22:07:30

标签: bash awk parallel-processing

命令失败,因为并行冲突的双引号与OFS =“\ t”的双引号。有什么建议可以使它有效吗?谢谢!

ls *bed | parallel -j 10 "intersectBed -a good-genes.gff -b {} -c | awk 'BEGIN{OFS="\t";} {print $1,$9,$4,$5,$7,$10}' > test.txt"

3 个答案:

答案 0 :(得分:3)

因为你有"外部"双引号,你也会遇到awk $变量的问题。我把它分成几块:

awk_body='BEGIN{OFS="\t";} {print $1,$9,$4,$5,$7,$10}'
ls *bed | parallel -j 10 "intersectBed -a good-genes.gff -b {} -c | awk '$awk_body' > test.txt"

答案 1 :(得分:2)

GNU Parallel是好的,只引用部分脚本:

ls *bed | parallel -j 10 intersectBed -a good-genes.gff -b {} -c \| awk \''BEGIN{OFS="\t\";} {print $1,$9,$4,$5,$7,$10}'\' > test.txt

(引用最后一个>会导致竞争条件,因为所有正在运行的作业都会尝试写入test.txt。要么给它一个唯一的名称({} .out或job {#}。out)或者离开>外部(在这种情况下,所有作业的所有输出都将在此处结束))。

答案 2 :(得分:1)

您可以使用"

在引号内转义\
ls *bed | parallel -j 10 "intersectBed -a good-genes.gff -b {} -c | awk 'BEGIN{OFS=\"\t\";} {print $1,$9,$4,$5,$7,$10}' > test.txt"