Intereting Posts
Правила iptables слишком ограничительны; Веб-сервер Drupal не может получить доступ к репозиториям, ntp или даже веб-сайтам Debian: невозможно установить пакеты с помощью apt-get chroot segfault Разрешения пользователя и группы для доступа к файлам и файлам mnt в CentOS 7 Обучение в среде программирования Unix Передача аргументов командной строки bash, содержащих # Как ecryptfs (файловые системы FUSE в целом) взаимодействуют с буферным кешем? Убедитесь, что раздел зашифрован CentOS 6 не регистрирует новое имя хоста в Windows Server 2003 apt-get версия tmux устарела Почему мой первый ramdisk настолько велик? Частота слов в тексте на неанглийском языке: как я могу объединить единичные и множественные формы и т. Д.? parse error в / var / lib / dpkg / status: поле «Зависимости», недопустимое имя пакета `python: any ' Проверьте, имеет ли переменная оболочки более одной строки с использованием встроенных модулей? Как эхо много контента в сценарии bash?

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

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

 $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