私は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
$