awk多场分离器?

时间:2017-10-02 02:14:38

标签: awk

我有一个像这样的行的大文件

chr1    HAVANA  gene    11869   14409   .       +       .       gene_id "ENSG00000223972.5"; gene_type "transcribed_unprocessed_pseudogene"; gene_name "DDX11L1"; level 2; havana_gene "OTTHUMG00000000961.2";

我想提取ENSG00000223972.5,DDX11L1,chr1,11886和14409。 我在前两个方面取得了成功:

awk 'BEGIN {FS="\""}; {print $2"\t"$6}' file.txt

我现在很难提取chr1,11869和14409,因为这需要一个不同的feild分离器?这是如何完成的;行?? ??

2 个答案:

答案 0 :(得分:1)

尝试使用以下命令提取您想要的内容,

awk 'BEGIN {FS="\"";OFS="\t"}; {split($1,a,/[\ ]*/); print a[1],a[4],a[5],$2,$6}' file.txt

简要说明,

  • split($1,a,/[\ ]*/:将$1拆分为数组a,分隔符为正则表达式/[\ ]*/
  • 根据需要打印存储在a中的拆分内容。

答案 1 :(得分:1)

$ awk -F'[ "]+' -v OFS='\t' '{print $1, $4, $5, $10, $16}' file
chr1    11869   14409   ENSG00000223972.5       DDX11L1