2015-03-24 3 views
1

У меня есть вкладка разделителей файл, который выглядит следующим образом:Организация данных и создание словаря

chr14 106559873  106560782  MA0004.1_Arnt 
chr14 106559873  106560782  MA0093.1_USF1 
chr14 106559873  106560782  MA0147.1_Myc 
chr14 106559873  106560782  RUNX3_DBD_WAACCRCAAWAACCRCAN 
chr10 17037867  17038971  MA0080.2_SPI1 
chr10 17037867  17038971  MA0152.1_NFATC2 
chr17 8610947 8611433 MA0080.2_SPI1 
chr17 8610947 8611433 MA0098.1_ETS1 

я хочу устроить так:

Regions MA0004.1_Arnt MA0093.1_USF1 MA0147.1_Myc RUNX3_DBD_WAACCRCAAWAACCRCAN MA0080.2_SPI1 MA0152.1_NFATC2 MA0098.1_ETS1 
chr14;106559873;106560782 1 1 1 1 0 0 0 
chr10;17037867;17038971  0 0 0 0 1 1 0 
chr10;17037867;17038971  0 0 0 0 1 0 1 

пример вывод показывает только пихты четыре линии , но это необходимо применить ко всему файлу. 1 обозначает наличие строки.

Snce это средняя часть кода, который я пишу, имеет решающее значение для моего анализа. Я не могу больше думать, как это сделать в awk.

спасибо.

+0

1 указывает на наличие или отсутствие строки, как в области chr14 106559873 106560782 имеет MA0004 .1_Arnt. следовательно, 1. – Angelo

+0

если присутствует, то 1 еще 0. – Angelo

+0

Вам нужно прочитать весь файл, чтобы начать печать ... Даже если это выполнимо, awk не кажется практичным выбором. – JuniorCompressor

ответ

2

Этот AWK скрипт получает вас большую часть пути туда:

BEGIN { 
    print "Regions MA0004.1_Arnt MA0093.1_USF1 MA0147.1_Myc RUNX3_DBD_WAACCRCAAWAACCRCAN MA0080.2_SPI1 MA0152.1_NFATC2 MA0098.1_ETS1" 
    a["MA0004.1_Arnt"] = a["MA0093.1_USF1"] = \ 
    a["MA0147.1_Myc"] = a["RUNX3_DBD_WAACCRCAAWAACCRCAN"] = \ 
    a["MA0080.2_SPI1"] = a["MA0152.1_NFATC2"] = a["MA0098.1_ETS1"] = 0 
} 

function print_fields() { 
    print p";"s";"e, a["MA0004.1_Arnt"], a["MA0093.1_USF1"], 
    a["MA0147.1_Myc"], a["RUNX3_DBD_WAACCRCAAWAACCRCAN"], 
    a["MA0080.2_SPI1"], a["MA0152.1_NFATC2"], a["MA0098.1_ETS1"]  
} 

NR>1&&$1!=p { 
    print_fields() 
    for (i in a) a[i] = 0 
} 

{ p=$1; s=$2; e=$3; a[$4]=1 } 

END { print_fields() } 

Testing его:

$ awk -f script.awk file 
Regions MA0004.1_Arnt MA0093.1_USF1 MA0147.1_Myc RUNX3_DBD_WAACCRCAAWAACCRCAN MA0080.2_SPI1 MA0152.1_NFATC2 MA0098.1_ETS1 
chr14;106559873;106560782 1 1 1 1 0 0 0 
chr10;17037867;17038971 0 0 0 0 1 1 0 
chr17;8610947;8611433 0 0 0 0 1 0 1 
+0

Является ли выходная вкладка разделенной? – Angelo

+0

Нет, где должна быть вкладка? –

+0

между 1 и 0 – Angelo

Смежные вопросы