Получить строки, которые соответствуют массиву значений для столбца - AWK - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы спросить, есть ли какой-нибудь быстрый способ, используя 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 в vals и 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

Заранее большое спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

еще 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
...