-1

私は2つのファイルを持っています。(2 つの実際のファイルの長さは 50 ~ 100 行になります)。

ファイル 1 には、4 つのフィールドで構成されるレコードがあります。名前; 生の読書スコア; 生の数学スコア; 生科学スコア

ファイル 2 には、Raw Score の 4 つのフィールドで構成されるレコード (ルックアップ テーブル) があります。変換された読書; 変換された数学; 変換された科学 このファイルには、生のスコアの任意の変換に関する重複エントリが含まれる場合があります。

次の 7 つのフィールドで構成される出力ファイルを作成したいと思います。生の読書スコア; 変換された読書; 生の数学スコア; 変換された数学; 生科学スコア; 変換された科学

したがって、以下の例のスミスの場合、スコア 3、7、4 の結果は次のようになります: 3-5、7-5、4-15 (読みやすくするためにスペース、ダッシュ、コンマを追加しました)

サンプル ファイル 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 にとって実行可能なタスクですか、それとも他の場所を探す必要がありますか?

ありがとう、

ジム

4

3 に答える 3

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
于 2013-07-11T20:16:43.147 に答える
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
于 2013-07-11T20:21:01.420 に答える
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]
}
于 2013-07-11T20:17:46.910 に答える