2013-07-11 30 views
-1

我有兩個文件。 (這兩個真實文件長度將是50-100行)。使用AWK從1個文件中使用3個值從第二個文件中查找3個值

文件1具有由4個字段組成的記錄。 名稱;原始閱讀分數;原始數學分數;原始科學得分

文件2具有由4個字段組成的記錄(查找表) 原始得分;轉換閱讀;轉換數學;已轉換科學 此文件可能包含重複條目,用於原始分數 的任何給定轉換,例如,原始分數8和9兩者的科學換算分數相等。

我想創建一個由7個字段組成的輸出文件: 名稱;原始閱讀分數;轉換閱讀;原始數學分數;轉換數學;原始科學評分;轉換科學

所以對於史密斯在我下面的例子中,得分 3,7,4的結果應該是: 3-5,7-5,4-15(我已經添加了空格,破折號和逗號對於readabilty)

示例文件1(名稱和3個原始分數)

Smith;3;7;4 
Jones;8;2;9 
Doe;1;9;4 

示例文件2(原始和3轉換的分數)

1;1;1;1 
2;3;2;5 
3;5;2;10 
4;6;3;15 
5;8;4;22 
6;11;5;35 
7;15;5;43 
8;18;6;50 
9;20;7;50 

所需的輸出連接勒(名稱,然後交替3原料和3轉換的分數)

Smith;3;5;7;5;4;15 
Jones;8;18;2;2;9;50 
Doe;1;1;9;7;4;15 

因此,我認爲我想讀取文件2分成數組,然後在文件1中讀出,使用陣列來查找轉換後的分數,然後輸出名稱和3組原始和轉換分數。

這是AWK的可執行任務,還是我應該在其他地方看看?

感謝,

吉姆

回答

2

這應該工作:

awk -F';' -v OFS=";" 'NR==FNR{a[$1]=$0;next} 
{ 
split(a[$2],b) 
split(a[$3],c) 
split(a[$4],d) 
print $1,$2,b[2],$3,c[3],$4,d[4]}' file2 file1 
+0

我不明白第一行的-v。我調整了一下,它工作正常。我將不得不閱讀拆分命令。謝謝。 – user2574126

+0

@ user2574126和別人一樣'BEGIN {FS = OFS =「;」}' – Kent

1

我相信這應該這樣做:

awk 'BEGIN{OFS=FS=";"}NR==FNR{s[$1,1]=$2;s[$1,2]=$3;s[$1,3]=$4;next}{print $1,$2,s[$2,1],$3,s[$3,2],$4,s[$4,3]}' table people 

注意文件的逆轉。

的解釋:

# Before processing any lines 
BEGIN{ 
    # Set the input and output field separators 
    OFS=FS=";" 
} 
# For the first file 
NR==FNR { 
    # Record the mappings - $1 is the first field, $2 the second, etc. 
    s[$1,1]=$2; 
    s[$1,2]=$3; 
    s[$1,3]=$4; 
    # Skip to the next line. This is often used 
    # instead of putting the opposite condition 
    # on the rest of the blocks, or putting a big 
    # if/else in one block. 
    next 
} 
# Every line that reaches here, i.e. the second file 
{ 
    # Print the student's name followed by each score raw and mapped. 
    print $1, $2, s[$2,1], $3, s[$3,2], $4, s[$4,3] 
} 
+0

好評!祝你們好運。 – shellter

+0

這很好!並感謝您的解釋。我應該能夠修改它類似的問題。吉姆 – user2574126

1

這應該工作:

awk ' 
BEGIN{FS=OFS=";"} 
NR==FNR{cr[$1]=$2;cm[$1]=$3;cs[$1]=$4;next} 
{print $1,$2,cr[$2],$3,cm[$3],$4,cs[$4]} 
' file2 file1 

輸出

Smith;3;5;7;5;4;15 
Jones;8;18;2;2;9;50 
Doe;1;1;9;7;4;15 
+0

工程就像一個魅力。 – user2574126

相關問題