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


假設有文件長如下樣子:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM