我正在尝试this的一个小变体,除了我告诉awk基于第5个字段要拆分的文件的分隔符可以是冒号“:”或制表符\ t。我单独执行awk -F '[:\t]'
部分,它确实打印了正确的$ 5字段。
但是,当我尝试将其合并到更大的命令中时,它会返回以下错误:
print > f
awk: cmd. line:9: ^ syntax error
这是代码:
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
为什么不能使用-F选项?
答案 0 :(得分:2)
问题不在于FS
的值,而是错误所指示的这一行:
f = "Alignments_" $5 ".sam" print > f
您在一行中有两个语句,因此要么将它们与;
或换行符分开:
f = "Alignments_" $5 ".sam"; print > f
或者:
f = "Alignments_" $5 ".sam"
print > f
作为一个完整的班轮:
awk -F '[:\t]' 'FNR==NR{n[$1];next}$5 in n{print > ("Alignments_"$5".sam")}'
或作为脚本文件,即script.awk
:
BEGIN {
FS="[:\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
}
以此格式awk -f script.awk Tile_Number_List.txt little.sam
运行。
修改强>
字符-
用于表示来自stdin的输入,而不是具有许多* nix工具的文件。
command | awk -f script.awk Tile_Number_List.txt -