我試圖根據第五個字段的值將文件拆分爲不同的較小文件。一個很好的方法是already suggested和also here。
不過,我正在嘗試將這個腳本合併到qsub的.sh腳本中,但沒有取得太大的成功。
的問題是,在指定的文件到輸出線路部分,
即f = "Alignments_" $5 ".sam" print > f
,我需要通過早期的腳本聲明的變量,它指定的目錄文件應該寫在哪裏。我需要使用爲每個任務構建的變量執行此操作,當我發送多個文件的陣列作業時。
所以說$output_path
= ./Sample1
我需要寫類似
f = $output_path "/Alignments_" $5 ".sam" print > f
但它似乎不喜歡有$變量,是不是屬於一個AWK $場。我甚至不認爲它喜歡在$ 5前後有兩個「字符串」。
我回來的錯誤是,它需要拆分文件的第一行(little.sam
),並試圖命名爲f
,然後是/ Alignments_「$ 5」.sam「(最後三個放在一起正確)。它說,當然,這是太大的名稱。
我怎麼能寫這樣它的工作原理?
謝謝!
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
UPDATE,之後加入-v來AWK並聲明VARIAB LE 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)
嘗試添加' ;'在$ 5之後.sam「'或將'print> f'放在新行中。 – Kent 2013-05-06 21:44:58
總是引用你的shell變量,除非你有一個非常具體的原因,並且完全意識到使用非引號變量時發生的文件名匹配,通配符擴展等等的警告和後果。另外,在'$ outputBase \ _TEST'中''_'是做什麼的?我想你可能正在編寫''$ {outputBase}/_ TEST「',但它根本不清楚。 – 2013-05-07 00:43:54