2016-12-21 7 views
0

Я пытался работать с этим в течение нескольких недель, и я знаю, что это простой скрипт awk, но я не может показаться, что он сильно продвинулся. Есть предположения?Найти числа в файле 2 в указанном диапазоне в 1 файле, а затем рассчитать среднее значение другого столбца в пределах этого диапазона

У меня есть два файла .txt, с которыми я имею дело.

Файл 1 (колонок 1 имеет то же значение) -

1 1000 1 
1 1003 3 
1 1020 6 
1 167999 5 
1 167222 4 

Файл 2 (колонок 1 имеет то же значение) -

1 1000 1050 
1 167000 168000 

Я хочу найти значение в колонке 2 файл 1, которые попадают в диапазон, указанный в столбцах 2 и 3 файла 2. Затем я хочу найти среднее значение столбца 3 в файле 1 в пределах указанных диапазонов и вывести список средних значений. Любая помощь очень ценится, поскольку я все еще новичок в мире кодирования!

+0

и что вы пробовали? Совет, начните с чтения файла2, поместите информацию в массивы, чем прочитайте файл1 и обработайте вычисление 'awk '...' file2 file1'. file1 [чтение второго файла] может быть строковым фильтром 'FNR! = NR' и file2 [first file read] filterd' FNR = NR' – NeronLeVelu

ответ

0

Вот отрывок, который должен помочь вам начать работу:

awk -v rangefile=file2 ' 
BEGIN { 
    ranges=0 
    while((getline < rangefile) > 0) { 
     ++ranges 
     low[ranges] = $2 
     high[ranges] = $3 
    } 
} 
{ 
    for(i = 1; i <= ranges; i++) { 
     if($2 >= low[i] && $2 <= high[i]) { 
      ... 
     } 
    } 
} 
END { 
    for(i = 1; i <= ranges; i++) { 
     print low[i], high[i] 
    } 
} 
' file1 

Я не заполнить ... часть, но я надеюсь, что выше покрывает сложная часть. Для ..., вы можете просто использовать массивы для суммы и подсчета, похожие на массивы для низких и высоких. В блоке END вы должны повторить цикл for (i ...), и внутри этого цикла распечатать все, что вы хотели, чтобы ваш выходной формат был.