繁体   English   中英

获取与一列值的数组匹配的行-AWK

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM