あるファイルの列データを別のファイルの行データに置き換える

あるファイルの列データを別のファイルの行データに置き換える

私はLinux環境が初めてで、いくつかのデータを処理するためのスクリプトを書く必要があります。

次のファイルがあります。

ファイルA:

1    X   1    1.0
2    X   1    1.0
3    X   1    1.0
4    Y   2    1.0
5    Y   2    1.0
6    Z   3    1.0

別のファイルは次のとおりです。

ファイルB:

1 0.5
2 0.3
3 0.2

ファイルAの4列目の数字をファイルBの2列目の数字に置き換える必要がありますが、ファイルAの3列目の数字とファイルBの1列目の数字とを一致させる必要があります。

希望の出力は次のとおりです。

1    X   1    0.5
2    X   1    0.5
3    X   1    0.5
4    Y   2    0.3
5    Y   2    0.3
6    Z   3    0.2

ベストアンサー1

ファイルをソートできない場合は、join区切りデータを処理するように設計されたAwkを使用してください。

この場合、最初のファイルが最初に渡され、ルックアップテーブルが作成され、次に最初のファイルが渡されると、ルックアップテーブルを使用して最初のファイルの各行が変更されます。

$ cat file2
1 0.5
2 0.3
3 0.2
$ cat file1
1    X   1    1.0
2    X   1    1.0
3    X   1    1.0
4    Y   2    1.0
5    Y   2    1.0
6    Z   3    1.0
$ awk 'NR==FNR {a[$1] = $2; next} {$4 = a[$3]} 1' file2 file1
1 X 1 0.5
2 X 1 0.5
3 X 1 0.5
4 Y 2 0.3
5 Y 2 0.3
6 Z 3 0.2
$

おすすめ記事