【发布时间】:2013-04-30 17:43:05
【问题描述】:
我正在尝试根据第五个字段的值将文件拆分为不同的较小文件。一个非常好的方法是 already suggested 和 also here。
但是,我试图将其合并到 qsub 的 .sh 脚本中,但没有取得多大成功。
问题是在指定输出该行的文件的部分中,
即f = "Alignments_" $5 ".sam" print > f
,我需要传递一个在脚本前面声明的变量,它指定了应该写入文件的目录。当我为多个文件发送数组作业时,我需要使用为每个任务构建的变量来执行此操作。
所以说$output_path = ./Sample1
我需要写一些类似的东西
f = $output_path "/Alignments_" $5 ".sam" print > f
但它似乎不喜欢有一个不属于 awk 的 $field 的 $variable。我什至不认为它喜欢在 $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
更新,在 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)
【问题讨论】:
-
尝试在
$5 ".sam"之后添加;或将print >f换成新的一行。 -
总是引用您的 shell 变量,除非您有非常具体的理由不这样做并且完全了解使用未引用变量时发生的文件名通配符、通配符扩展等的警告和后果.另外,
\_打算在$outputBase\_TEST中做什么?我认为您可能正在尝试写"${outputBase}/_TEST",但根本不清楚。
标签: unix variables awk split field