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 не рассматривал его как свою переменную. Но почему-то tab не работает. Может ли кто-нибудь сказать мне, что здесь происходит. Конечно, я могу использовать sed 's/t/\t/g' после команды awk, но мне нужно понять, что здесь происходит и почему это не работает.

Спасибо заранее

0
15.03.2017, 18:01
1 ответ

Вы делаете:

 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 - ваш друг для исследования такого рода проблемы с кавычками.

2
28.01.2020, 02:34

Теги

Похожие вопросы