我有一个文本文件,如下面的小例子:
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
在输入文件中,有不同的行。每行以((column 4 in original file)-12)
开头。每行都有一些列和分隔符是tab或&#34 ;;"。
我想从这个文件中创建一个新文件,其中仅在第4列和第5列中进行更改。事实上,如果第7列是" +",那么新文件中的第4列将是是((column 4 in original file)+50)
,新文件中的第5列将是((column 4 in original file)+12)
。如果第7列是" - ",那么新文件中的第4列将是((column 4 in original file)-50)
,新文件中的第5列将是awk
。唯一的区别是输入文件和输出文件的第4和第5列中的数字。
我尝试使用以下命令在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 :(得分:0)
关注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单独格式的输出。