이런 명령을 실행하려고 합니다.
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
그러한 인용 문제를 조사하는 것은 당신의 친구입니다.