これらのコマンドを実行しようとしています。
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
そのような引用問題を調査することはあなたの友人です。