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そのような引用問題を調査することはあなたの友人です。

おすすめ記事