0

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)
4

2 に答える 2

1

などのシェル変数の値を渡すには、オプションを使用$output_pathするawk必要があり-vます。

$ output_path=./Sample1/

$ awk -F '[:\t]' -v opath="$ouput_path" '    
    # 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 = opath"Alignments_"$5".sam"
        print > f
    } ' Tile_Number_List.txt little.sam

また、以前の質問のエラーがスクリプトに残っています

編集:

で作成されたawk変数は次のとおり-vですobaseが、必要なものを使用newdirします。

input=$1
outputBase=${input%.bam}
mkdir -v $outputBase\_TEST
newdir=$outputBase\_TEST

samtools view -h "$input" | awk -F '[\t:]' -v opath="$newdir" '
FNR == NR && NR >= 18 {
    num[$1]
    next
}    
$5 in num {
    f = opath"/Alignments_"$5".sam"   # <-- opath is the awk variable not newdir
    print > f
}' Tile_Number_List.txt -

NR >= 18また、2 番目のawkスクリプトに移動する必要があります。

于 2013-05-06T21:44:38.347 に答える