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



我有两个这种格式的文本文件:

文件-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  

如果File-1initial four columnsinitial four columns File-2匹配,则将单词 Raw_scoreActual_score 及其values放在匹配行的末尾,用;符号分隔,如下所示:

输出:

5        6357   G      V       ACT/wo%%$2.25;56842;ALT;Raw_score=1.358;Actual_score=10.685
$ 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》一书,并修改脚本以包含空白字符、换行符、缩进、有意义的变量名称等,使其更清晰 - 这样做将帮助您学习语言。

最新更新