2つのファイルがあります。ファイル1の列9がファイル2の列1と同じになるように、ファイル2の列2をファイル1の列12に置き換えるにはどうすればよいですか。
ファイル1
1 2000 11 11 7 9 45 840 49667.8048 18.33 HeI 6.10352e-05
2 2000 11 11 8 56 57 660 49667.8782 18.15 HeI 0.00546265
3 1994 11 12 5 18 10 1020 49668.7284 18.34 HeI -0.00497437
4 1994 11 12 7 35 30 840 49668.8227 18.14 HeI -0.00357056
5 1994 11 12 9 6 42 720 49668.8854 17.99 HeI -0.00476074
6 1994 11 14 5 20 43 600 49670.7279 18.04 HeI -0.00326538
7 1994 11 14 7 32 46 630 49670.8197 17.84 HeI -0.00598145
8 3000 11 14 9 21 14 540 49670.8945 17.66 HeI 0.00701904
9 1994 11 15 5 21 14 610 49671.7283 17.88 HeI -0.00100708
10 4445 11 15 7 4 5 540 49671.7994 17.73 HeI -0.00503540
11 1994 11 15 9 1 14 600 49671.8811 17.53 HeI 0.000000
12 1996 1 11 0 56 4 301 50093.5444 2.26 HeI 0.00570679
13 1996 1 11 1 2 30 601 50093.5506 2.25 HeI 0.00424194
14 1996 1 11 1 15 23 541 50093.5592 2.23 HeI 0.00100708
15 1996 1 11 1 26 29 420 50093.5662 2.22 HeI 0.00372314
ファイル2
49667.8048 78.450 3.000 1 1
49667.8782 79.900 1.000 1 1
49668.7284 40.890 1.000 1 1
49668.8227 45.790 1.000 1 1
49668.8854 49.770 5.000 1 1
49670.7279 66.060 1.000 1 1
49670.8197 47.380 1.000 1 1
49670.8945 27.270 6.000 1 1
49671.7283 66.190 1.000 1 1
49671.7994 65.320 6.000 1 1
49671.8811 62.290 1.000 1 1
望ましい結果:
49667.8048 6.10352e-05 3.000 1 1
49667.8782 0.00546265 1.000 1 1
49668.7284 -0.00497437 1.000 1 1
49668.8227 -0.00357056 1.000 1 1
49668.8854 -0.00476074 5.000 1 1
......
私は次のことを試しました
awk 'NR==FNR{ar[$9]=$0;next}($1 in ar){print ar[$9],$0}' file1 file2
答え1
使用gawk
:
$ awk 'NR==FNR{ar[$9]=$12;next}
($1 in ar) {$2= ar[$1]}1' file1 file2
このコマンドは、NR==FNR{ar[NR]=$12;next}
ルールが最初のファイルに適用されることを意味します。ただFNR
file1以降は0に設定されるからです。この規則では、ar
最初のファイルのフィールド9()にインデックス付けされたフィールド12の内容を使用して配列が作成されます。さらなる措置が取られるのを防ぎます。$9
file1
next
file1
この式は、if ($1 in ar) $2=ar[$1]
最初のフィールド($1
)が次に見つかるかどうかを意味します。索引次に、ar
2番目のフィールドfile2
をar
。これはar
、最初のファイルの$ 9にインデックスが作成されるためですfile1
。これで変更されたため、新しい$2
ものが印刷されます。file2
1
$0
と1
isawk
のイディオムを印刷します。
答え2
ファイルがソートされているので、次のようにこれを行うことができますjoin
。
join file1 file2 -1 9 -2 1 -o 2.1,1.12,2.3,2.4,2.5
説明する:
-1
両方のファイルは、file1(オプション)の列#9と-2
file2(オプション)の列#1でリンクされています。- 出力(
-o
)オプションは、フィールド2.1(ファイル2の列1)、1.12(ファイル1の列12)などで構成されています。