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

У меня есть файл с интервалами, начиная с столбца «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 (как определено в пятом столбце).

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

  • Шестнадцатиричные символы трубы для awk
  • Поиск только одного слова в Unix
  • Переименование файлов с номерами в соответствующие 1-n числа в порядке
  • Строки соответствия, начинающиеся с одного шаблона в двух текстовых файлах
  • Сравнение awk с использованием массивов
  • Замените определенные строки на значение из предыдущей строки
  • Сортировка нескольких файлов csv на основе двух столбцов в каталоге
  • Группируйте содержимое файла двумя полями и суммируйте третье поле
  • 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

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