Как извлечь диапазон чисел из двух файлов?

Загрузите Linux и используйте dd.

dd if=/dev/zero of=/dev/hda bs=512 count=1  

Это сотрет MBR, а это все, что вам нужно. Когда вы устанавливаете Windows, она увидит пустой загрузочный сектор и создаст GPT.

0
31.07.2019, 11:29
2 ответа

Это потому, что вы вводите свой массив xв $1, который является одним и тем же chr1для всех строк в первом файле. Таким образом, в каждой строке содержимое массива индексируется на основе одного и того же ключа и перезаписывается значением в $2. Итак, к концу файла у вас есть одна запись в массивеx['chr1']=744200

Вам нужно сохранить строку уникально. Сохраните ключ как кортеж $1 FS $2и измените свою логику на

awk 'NR == FNR { x[$1 FS $2] = $2; next }{ 
     for (key in x) { 
       split(key, arr)
       if (arr[2] > $2 && arr[2] < $3) 
           print arr[2], $0 
       else {
           print arr[2], "out of range"
       }
     }
}' file1 file2

Чтобы улучшить логику выполнения проверки диапазона только в строках, где первый столбец одинаков для обоих файлов, добавьте условие в ifкак

if ( (arr[2] > $2 && arr[2] < $3) && ( $1 == arr[1] ) ) 
1
28.01.2020, 02:39

Предполагая, что диапазоны file2 не перекрываются, как в вашем примере:

$ cat tst.awk
NF==3 { beg=$2; end=$3; all=$0; next }
{ print $2, ( ($2 >= beg) && ($2 <= end) ? all : "out of range" ) }

$ sort -sk2n file2 file1 | awk -f tst.awk
69509 chr1 69091 70005
69511 chr1 69091 70005
71000 out of range
358112 chr1 358070 358183
586874 chr1 586842 586955
744200 chr1 744195 744343

Он использует сортировку GNU для-s(«стабильной сортировки» ), чтобы гарантировать, что запись file2 печатается перед записью file1в случае идентичных $2s.

0
28.01.2020, 02:39

Теги

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