Linux - 操作两个文本文件的列

时间:2016-02-28 07:59:35

标签: linux awk sed

我有两种文本格式:

文件-1:

Class    Pos    Ref    Alt    Raw_score    Actual_Score
1        50203  Y      E      -0.00254     3.298 
5        6357   G      V       1.358       10.685 
2        87521  A      H       0.6587      6.3354  

文件-2:

Class    Pos    Ref    Alt     Info 
5        6357   G      V       ACT/wo%%$2.25;56842;ALT 
11       25684  H      A       GEP/hq#$..25;69875;Trans 
3        258    G      L       KPD/ng?~88q68;8954;Inter  

如果initial four columns的{​​{1}}与File-1的{​​{1}}匹配,则将initial four columnsFile-2及其Raw_score放在一起1}}在匹配行的末尾,以Actual_score符号分隔,如下:

输出:

values

1 个答案:

答案 0 :(得分:1)

$ awk '{k=$1FS$2FS$3FS$4}NR==FNR{if(NR>1)a[k]=";"b"="$5";"c"="$6;else{a[k]="";b=$5;c=$6}next}k in a{print $0a[k]}' file1 file2
Class    Pos    Ref    Alt     Info
5        6357   G      V       ACT/wo%%$2.25;56842;ALT;Raw_score=1.358;Actual_Score=10.685

如果您不理解该脚本,请阅读Arnold Robbins撰写的Effective Awk Programming,4th Edition,并修改脚本以包含空白字符,换行符,缩进,有意义的变量名称等,以使其更清晰 - 做这将有助于你学习语言。