2015-05-29 3 views
0

Так что у меня до сих пор есть файл Bed-Table, и проблема с этим файлом заключается в том, что в некоторых строках значение в столбце 2 больше значения в столбце 3.AWK: нужно поменять значения между двумя столбцами, если левая часть меньше правой.

Есть ли какой-либо один вкладыш в awk, который заменит эти два значения, чтобы таблица всегда получала меньшее значение в столбце 2, а большее значение в столбце 3 ?

chr01 100 200 
chr02 300 150 

поэтому в данном примере желаемый результат будет:

chr01 100 200 
chr02 150 300 
+0

Что это за файл «Bed-Table»? Даже Google не кажется сейчас. –

+0

Файл кровати представляет собой таблицу, которая содержит координаты последовательностей ДНК в геноме. Вы можете использовать его для извлечения последовательностей из генома или анализа, например, существуют гены, близкие друг к другу или последовательности, перекрывающиеся друг с другом. – JadenBlaine

ответ

1

Просто поменять местами столбцы, если они неправы с использованием временной переменной:

$ awk '$2 > $3 { temp = $3; $3 = $2; $2 = temp } 1' OFS='\t' file 

1 в конце является общей сокращенностью для {print}, поэтому каждая строка печатается. Установка разделителя полей вывода OFS на символ табуляции сохраняет формат.

В качестве альтернативы:

$ awk -F'\t' '$2 > $3 { $0 = $1 FS $3 FS $2 } 1' file 

Перестановка содержимого строки, если это необходимо, с помощью поля ввода разделителя FS, который был установлен на символ табуляции.

0

Вы можете использовать AWK,

awk '$2>$3{x=$3;$3=$2;$2=x}1' file 
+2

Команда переключает нужные значения, но вызывает ошибку, так как она каким-то образом удаляет вкладку между столбцами – JadenBlaine

+0

'awk '$ 2> $ 3 {x = $ 3; $ 3 = $ 2; $ 2 = x} 1' file | sed 's/\ +/\ t/g'' –

0
awk '{ printf("%s %d %d\n",$1,($2 < $3) ? $2 : $3,($2 < $3) ? $3 : $2) }' file