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"

보시다시피, 쉘이 이를 on 변수로 처리하지 않도록 백슬래시를 사용하여 각 열($)을 이스케이프해야 했습니다. 하지만 일부 탭은 작동하지 않습니다. 누구든지 여기서 무슨 일이 일어나고 있는지 말해 줄 수 있습니까? 물론 sed 's/t/\t/g'awk 명령 다음에 사용할 수 있지만 여기서 무슨 일이 일어나고 있고 왜 작동하지 않는지 이해해야 합니다.

미리 감사드립니다

답변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그러한 인용 문제를 조사하는 것은 당신의 친구입니다.

관련 정보