Извлечь начальные и конечные координаты в соответствии с определенной длиной нефиксированного интервала

У меня есть файл с интервалами, начиная с столбца «start» и заканчивая столбцом «end». Я должен извлечь начало и конец этих интервалов в соответствии с определенной длиной, которая написана в 4-м столбце. Также мне нужно распечатать информацию, содержащуюся в столбце «оценка». Файл выглядит следующим образом:

Input: chr start end score length chr1 237592 237601 176 320 chr1 237601 237912 176 320 chr1 521409 521601 150 320 chr1 521601 521729 150 320 chr1 714026 714346 83 320 chr1 805100 805201 323 340 chr1 805201 805440 323 340 Output: chr start end score length chr1 237592 237912 176 320 chr1 521409 521729 150 320 chr1 714026 714346 83 320 chr1 805100 805440 323 340 

Как вы заметили, длина интервала для извлечения находится в 5-м столбце. Например, длина интервала в выходе:

 chr1 237592 237912 

был получен путем вычитания 237912 (во второй строке столбца «конец») до 237592 (в первой строке столбца «старт»), которая равна 320 (как определено в пятом столбце).

Любая идея очень ценится.

  • Отсутствует путь
  • Вывод «Вырезание» id
  • Как удалить первый символ в определенном столбце, используя sed
  • Почему эта команда awk не выполняет полное внешнее соединение?
  • Как найти и заменить в одном поле на основе значения в другом поле?
  • Как awk уникальная строка и печать 2 строк выше
  • Извлечение определенных данных из файла с помощью ключевого слова
  • Slurp-режим в awk?
  • 2 Solutions collect form web for “Извлечь начальные и конечные координаты в соответствии с определенной длиной нефиксированного интервала”

    Проблема заключается в слиянии строк, свободно говоря. Строка может быть «объединена» с предыдущей строкой, если ее начальная координата совпадает с конечной координатой строки выше.

    Линии, вероятно, соответствуют геномным особенностям. И цель состоит в том, чтобы объединить объекты, которые смежны в геномной последовательности.

    Это awk скрипт, который делает это:

     $2 == end { # This line merges with the previous line. # Update end and continue with next line. end = $3; next; } { # This is an unmergeable line (start doesn't correspond to end on # previous line). # If we've processed at least the header line, print the data collected. # The if statement avoids printing an empty output line at the # start of the output. if (NR > 1) { print chr, start, end, score, len; } # Get data from this line. chr = $1; start = $2; end = $3; score = $4; len = $5; } END { # At the end of input, print the data as above to output last line. print chr, start, end, score, len; } 

    Сценарий предполагает сортировку ввода и что все начальные координаты строго меньше конечных координат (т. Е. Все функции лежат на положительной цепочке).

    Тестирование:

     $ awk -f script.awk data chr start end score length chr1 237592 237912 176 320 chr1 521409 521729 150 320 chr1 714026 714346 83 320 chr1 805100 805440 323 340 

    Для меня это выглядит как текстовый файл, где столбцы ограничены пробелами. Он может быть элегантно обработан с помощью R но скрипт оболочки тоже может это сделать. Вам нужно прочитать файл по строке, используя for цикла. Внутри цикла простой способ состоял бы в том, чтобы присвоить каждому значению столбца (вы могли бы использовать cut для этого) переменной, а затем распечатать переменные, чтобы вы этого захотели. Добавленные вместе переменные 2-го и 5-го столбцов создают 3-й столбец для вашего вывода. Вы можете печатать на экране каждую из ваших выходных строк с echo из цикла for. Когда вы увидите, что линия печати на экране по своему вкусу, вы просто перенаправляете вывод своего скрипта в файл, подобный этому your_script.sh > your new output.txt

    Interesting Posts

    Выгрузить модуль невосприимчивого ядра

    Почему `tac файл | grep foo '(piping) быстрее, чем `grep foo <<(tac файл)' (замена процесса)?

    Использовать конфигурационный файл для ftp с автоматическим подключением при первом подключении

    Проблемы с CMake в CentOS 6

    Какова цель кажущихся непригодными для памяти сопоставлений в Linux?

    1: 1 NAT с несколькими идентичными локальными сетями

    Рекомендации по книге Mono

    Как правильно выравнивать разделы?

    Сделайте Debian как USB-устройство, которое я могу подключить к другой машине

    OverlayFS не работает с непривилегированным пространством имен пользователей

    Вопросы о sudo

    В Debian в fluxbox GtkPod не имеет права на запись, но делает это в GNOME

    Как сделать следующее форматирование с помощью сценария sed или awk или bash на linux

    Каков шрифт по умолчанию для Grub в Ubuntu и Fedora?

    проверить «новизну» / «is-read» / var / spool / mail / $ USER, например pam_mail для пользовательского сценария motd

    Linux и Unix - лучшая ОС в мире.