我正在尝试运行一个类似这样的命令
intersectBed -a yeast.v2.bed -b cov.txt -wa -wb | awk -v OFS="\t" '{print $7,$8,$9,$6,$11,$10}' > out.txt
out.txt 看起来像这样
chrI 151006 151096 0
chrI 142253 142619 53
chrI 87387 87500 8
我正在集群上工作,当我 qsub 上述命令(即提交到集群)时,我得到这样的 out.txt 文件
chrIt151006t151096t0
chrIt142253t142619t53
chrIt87387t87500t8
我使用 qsub 的命令行是这样的:
qsub -l h_vmem=4G -cwd -j y -b y -N test "intersectBed -a yeast.v2.bed -b cov.txt -wa -wb | awk -v OFS="\t" '{print \$7,\$8,\$9,\$6,\$11,\$10}' > out.txt"
正如您所看到的,我必须使用反斜杠转义每一列($),以便 shell 不会将其视为其 on 变量。但有些选项卡不起作用。谁能告诉我这里发生了什么事。当然,我可以sed 's/t/\t/g'
在 awk 命令之后使用,但我需要了解这里发生了什么以及为什么它不起作用。
提前致谢
答案1
你正在做的:
qsub ... "intersectBed ... -v OFS="\t"...more double-quoted text"
所以这\t
是在双引号之外。对于 shell,在引号之外\
是另一个引用运算符。有\t
喜欢't'
或"t"
,所以只是t
。
你实际上正在做awk -v OFS=t
。
使用:
qsub... "inter... | awk -v OFS='\t' '{print \$7,\$8,\$9,\$6,\$11,\$10}' > out.txt"
或者,只担心单引号字符:
qsub... 'inter... | awk -v OFS="\t" '\''{print $7,$8,$9,$6,$11,$10}'\'' > out.txt'
set -x
是您的朋友调查此类报价问题。