使用awk在文本文件中执行多个操作

时间:2018-05-31 14:03:43

标签: awk

我有一个文本文件,如下面的小例子:

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}}

它不会返回任何内容。你知道怎么解决吗?我想获得一个与输入文件格式完全相同的输出文件。意思是相同的分隔符。

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单独格式的输出。