5 番目のフィールドの値に応じて、ファイルを別の小さなファイルに分割しようとしています。これを行うための非常に優れた方法は、すでに提案されており、こちらにもあります。
ただし、これを qsub の .sh スクリプトに組み込もうとしていますが、あまり成功していません。
問題は、行を出力するファイルを指定するセクションで、
つまり、 f = "Alignments_" $5 ".sam" print > f
、スクリプトで以前に宣言された変数を渡す必要があります。これは、ファイルが書き込まれるディレクトリを指定します。複数のファイルの配列ジョブを送信するときに、タスクごとに作成される変数を使用してこれを行う必要があります。
つまり、$output_path
=./Sample1
次のようなものを書く必要があります
f = $output_path "/Alignments_" $5 ".sam" print > f
しかし、awk に属する $field ではない $variable を持つのは好きではないようです。$5 の前後に 2 つの「文字列」があるのが好きだとは思いません。
私が返すエラーは、ファイルの最初の行を分割 ( little.sam
) し、そのように名前を付けようとf
し、その後に /Alignments_" $5 ".sam" (最後の 3 つを正しくまとめたもの) が続くというものです。 、それはあまりにも大きな名前です。
これが機能するようにするにはどうすればよいですか?
ありがとう!
awk -F '[:\t]' ' # read the list of numbers in Tile_Number_List
FNR == NR {
num[$1]
next
}
# process each line of the .BAM file
# any lines with an "unknown" $5 will be ignored
$5 in num {
f = "Alignments_" $5 ".sam" print > f
} ' Tile_Number_List.txt little.sam
更新、AWK に -V を追加し、変数 OPATH を宣言した後
input=$1
outputBase=${input%.bam}
mkdir -v $outputBase\_TEST
newdir=$outputBase\_TEST
samtools view -h $input | awk 'NR >= 18' | awk -F '[\t:]' -v opath="$newdir" '
FNR == NR {
num[$1]
next
}
$5 in num {
f = newdir"/Alignments_"$5".sam";
print > f
} ' Tile_Number_List.txt -
mkdir: created directory little_TEST'
awk: cmd. line:10: (FILENAME=- FNR=1) fatal: can't redirect to `/Alignments_1101.sam' (Permission denied)