Как выбрать строки файла на основе нескольких условий другого файла?

Что в принятом ответе не указано, как это сделать, как вы говорите в вопросе, если вы все еще хотите извлечь в определенную папку без использования путей к папкам, хранящихся в zip-файлах, вы можете использовать -jвариант с -dвариант таким образом:

unzip -j /path/to/file.zip -d other_folder

или для вашего случая

unzip -j myarchive.zip -d b
2
07.02.2020, 12:02
2 ответа

Как предложено в комментарии:

awk '
NR == FNR       {RGMIN[++IX] = $3 - 5000                        
                 RGMAX[IX]   = $3 + 5000  
                 CHROM[IX]   = $2              
                 next
                }
FNR == 1        {print                                         
                 next
                }
                {PR = 1                                         
                 for (i=2; i<=IX; i++) if ($2 == CHROM[i]) PR = PR * ($3 < RGMIN[i] || $3 > RGMAX[i])                                              
                }
PR          
' file2 file1 
Variant   Chromsome   Chromosome Position  
Variant1      2             14000     
Variant3      8             37000          
2
28.04.2021, 23:24

В зависимости от того, насколько тяжел файл2 по отношению к файлу1, вы также можете сопоставить файл2, а затем просто проверить, не сопоставлено ли местоположение в файле1.....

 awk 'FNR==NR{for (i=$3-5000; i<=$3+5000; i++){v[$2"."i]=1}}
      FNR!=NR{if (! v[$2"."$3]) print $0}
      ' file2 file1 

Медленнее, чем @RudiC для этого набора данных, но если в файле 2 имеется большое количество нескольких перекрывающихся диапазонов, это может оказаться более целесообразным.

1
28.04.2021, 23:24

Теги

Похожие вопросы