выполнение нескольких операций в текстовом файле с использованием awk - PullRequest
0 голосов
/ 31 мая 2018

У меня есть текстовый файл, подобный следующему небольшому примеру:

chr1    HAVANA  UTR 368595  368634  .   +   .   gene_id "ENSG00000235249.1"; transcript_id "ENST00000426406.1"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F29"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F29-001"; level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS41220.1"; havana_gene "OTTHUMG00000002860.1"; havana_transcript "OTTHUMT00000007999.1";
chr1    HAVANA  transcript  453633  460480  .   -   .   gene_id "ENSG00000236601.1"; transcript_id "ENST00000450983.1"; gene_type "lincRNA"; gene_status "NOVEL"; gene_name "RP4-669L17.2"; transcript_type "lincRNA"; transcript_status "KNOWN"; transcript_name "RP4-669L17.2-002"; level 2; tag "not_best_in_genome_evidence"; tag "basic"; havana_gene "OTTHUMG00000002855.2"; havana_transcript "OTTHUMT00000007988.2";

ожидаемый результат для небольшого примера:

chr1    HAVANA  UTR 368583  368595+50   .   +   .   gene_id "ENSG00000235249.1"; transcript_id "ENST00000426406.1"; gene_type "protein_coding"; gene_status "KNOWN"; gene_name "OR4F29"; transcript_type "protein_coding"; transcript_status "KNOWN"; transcript_name "OR4F29-001"; level 2; tag "basic"; tag "appris_principal"; tag "CCDS"; ccdsid "CCDS41220.1"; havana_gene "OTTHUMG00000002860.1"; havana_transcript "OTTHUMT00000007999.1";
chr1    HAVANA  transcript  453645  453583  .   -   .   gene_id "ENSG00000236601.1"; transcript_id "ENST00000450983.1"; gene_type "lincRNA"; gene_status "NOVEL"; gene_name "RP4-669L17.2"; transcript_type "lincRNA"; transcript_status "KNOWN"; transcript_name "RP4-669L17.2-002"; level 2; tag "not_best_in_genome_evidence"; tag "basic"; havana_gene "OTTHUMG00000002855.2"; havana_transcript "OTTHUMT00000007988.2";

во входном файле, есть разные строки,каждая строка начинается с chr.В каждой строке есть несколько столбцов, а разделителями являются табуляция или «;».Я хочу сделать из этого файла новый файл, в котором будут изменения только в столбцах 4 и 5. На самом деле, если столбец 7 равен «+», тогда столбец 4 в новом файле будет ((column 4 in original file)-12) и 5-йстолбец в новом файле будет ((column 4 in original file)+50).и если столбец 7 - «-», то столбец 4 в новом файле будет ((column 4 in original file)+12), а 5-й столбец в новом файле будет ((column 4 in original file)-50). единственная разница между входным файлом и выходным файлом в числах в 4-ми 5-й столбец.Я попытался сделать это в awk, используя следующую команду: Я попробовал этот код:

awk -F '\t' '$7= "+" { col4 = $4; $4 = col4 - 12; $4 = col5 + 50; print }' '$7= "-" { col4 = $4; $4 = col4 + 12; $5 = col4 -50 ; print }' OFS='\t' infile.txt > outfile.txt

он ничего не возвращает.ты знаешь как это исправить?Я хочу получить выходной файл в том же формате, что и входной файл.имеется в виду те же разделители.

1 Ответ

0 голосов
/ 31 мая 2018

После awk может помочь вам в этом.

awk '($7=="+"){$5=$4+50;$4=$4-12} ($7=="-"){$5=$4-50;$4=$4+12} 1'  Input_file

Ваш образец Input_file это НЕ разделенный табуляцией, если у вас есть файл с разделителем TAB, затем добавьте BEGIN{FS=OFS="\t"} в коде выше, чтобы получить вывод в отдельной форме TABтоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...