2016-02-28 112 views
-1

我有这种格式的两个文本文件中的列:的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 

如果initial four columnsFile-1File-2initial four columns匹配,然后将文字Raw_scoreActual_score及其values在匹配线的末端,分离与;标志,如:

输出:

5  6357 G  V  ACT/wo%%$2.25;56842;ALT;Raw_score=1.358;Actual_score=10.685 
+2

你可能想要阅读'join',还有'awk'和'sort'。 –

+0

可能重复的[加入多个字段使用Unix加入](http://stackoverflow.com/questions/2619562/joining-multiple-fields-using-unix-join) – tripleee

+0

Yups,但加入模式在我的情况是不同的。 –

回答

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 

如果你不明白,那么脚本读的书有效AWK编程,第4版,由Arnold Robbins撰写并修改脚本以包含空白字符,换行符,缩进,有意义的变量名等,以使其更清晰 - 这样做可以帮助您学习该语言。