[英]Get lines that match with an array of values for a column - AWK
我想问一下是否有使用awk的快速方法来获取与第一列和第二列相匹配的每一行的第三列的值?
我遇到的情况是,我在数组变量中输入了与文件第二列匹配的值,在变量中输入了与第一列匹配的值。
因此,我有变量vals和chr:
chr="chr1"
vals=($(seq 4 1 10))
echo ${vals[@]}
我想在这样的脚本中使用它们:
res=$(awk '{if ($1=="'$chr'" && $2 in "'$vals[*]'") print $3} ' $depthFile)
假设我的档案中有这个:
chr1 5 length=35
chr1 6 length=35
chr1 7 length=35
chr1 8 length=35
chr1 9 length=76
chr1 10 length=35
chr1 11 length=35
chr1 12 length=35
chr1 13 length=35
chr1 14 length=76
我有6 7 8 9
val和chr = chr1。
我期望使用echo ${res[@]}
具有:
length=35
length=35
length=35
length=76
到目前为止,我收到此错误。 我知道传递vals数组有问题。
awk: cmd. line:1: {if ($1=="chr1" && $2 in "4[*]") print $3}
awk: cmd. line:1: ^ syntax error
提前非常感谢您!
另一个awk
如果您的值是一个范围而不是随机数,则可以更习惯地对其进行编码
$ awk -v key="chr1" -v from=4 -v to=10 '$1==key && from<=$2 && $2<=to {print $3}' file
length=35
length=35
length=35
length=35
length=76
length=35
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.