2012-07-24 176 views
2

我有两个文件:AWK - 文件共享

File_1

Head;track1;track2;track3; 
date1;vol2;vol4;vol9; 
date2;vol5;vol0;vol1; 
date3;vol7;vol2;vol5; 

File_2

Head1 
trackV1 track1 
trackV2 track2 
trackV3 track3 

我想分享File_1并存储在单独的文件的结果。使用File_1我分别编写($ 1,$ 2),($ 1,$ 3),($ 1,$ 4)。新文件的名称将从第一列File_2(trackV1,trackV2,trackV3)中检索。我要创建这些文件:

trackV1

Head track1 
date1 vol2 
date2 vol5 
date3 vol7 

trackV2

Head track2 
date1 vol4 
date2 vol0 
date3 vol2 

trackV3

Head track3 
date1 vol9 
date2 vol1 
date3 vol5 

我尝试了不同的解决方案,但不工作:

awk 'BEGIN { while(getline < "File_1"){split($0, tab, ";"); print $(getline a < "File_2") > tab[1] tab[2]}}' 

感谢您的帮助。

回答

3

把它放在foo.awk。使用方法(注意文件的顺序)
awk -f foo.awk File_2 File_1

BEGIN { 
    # fields separator 
    FS=";" 
} 

# skip a first line in the "names file" 
NR==FNR && NR==1 {next} 

NR==FNR { 
    # read "names file" 
    split($1, aux, " ") 
    name[aux[2]]=aux[1] 
    next 
} 

FNR!=NR && FNR==1{ 
    # read a header of the "data file" and create output files 
    split($0, head) 
    for (i=2; i<NF; i++) { 
     print "Head", head[i] > name[head[i]] 
    } 
    next 
} 

{ 
    # populate output files 
    for (i=2; i<NF; i++) { 
     print $1, $i >> name[head[i]] 
    } 
} 
+0

感谢一个很好的解决方案。 – Tedee12345 2012-07-25 04:47:21