Я пытаюсь выполнить команду, которая выглядит примерно так
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 не рассматривал его как свою переменную. Но почему-то tab не работает. Может ли кто-нибудь сказать мне, что здесь происходит. Конечно, я могу использовать sed 's/t/\t/g'
после команды awk, но мне нужно понять, что здесь происходит и почему это не работает.
Спасибо заранее
Вы делаете:
qsub ... "intersectBed ... -v OFS="\t"...more double-quoted text"
Так что \ t
находится вне двойных кавычек. Для оболочки, помимо кавычек, \
- это еще один оператор кавычек. Там \ 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
- ваш друг для исследования такого рода проблемы с кавычками.