1. 程式人生 > >linux提取指定列字符並打印所有內容(awk)

linux提取指定列字符並打印所有內容(awk)

sample 文件 amp col $2 表達式 info logs 文件中

假設有文件長如下樣子:

CHROM POS ID REF ALT QUAL FILTER INFO FORMAT samplename

1 3552841 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

1 3552842 . T . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

2 3552843 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

2 3552844 . T . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

3 3552845 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

3 3552846 . C . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

4 3552847 . A . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

5 3552848 . C . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

6 3552849 . A . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

7 3552850 . C . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

現提取第一列字符為“3”,並打印出符合第一列為“3”的所有列,同時保存,則可以用以下命令:

awk -F " " ‘{if($1~/^3/) print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}‘ sample.vcf > samplecol.vcf  #{if($1~/^3/) print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10}‘ 的意思是,在文件sample.vcf中,如果第一列($1)裏面有匹配(~)正則表達式(/^3/)的話,那麽就輸出(print)到標準輸出。保存到samplecol.vcf文件中。

輸出的文件如下:

3 3552845 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

3 3552846 . C . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1

linux提取指定列字符並打印所有內容(awk)