2012-07-24 65 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