awk 无法与 qsub 配合使用

awk 无法与 qsub 配合使用

我正在尝试运行一个类似这样的命令

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是您的朋友调查此类报价问题。

相关内容