두 개의 파일이 있습니다. 파일 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
두 번째 필드 file2
를 ar
. 이는 ar
첫 번째 파일의 $9에 인덱스가 생성되기 때문입니다 file1
. 이제 변경되었으므로 새 $2
것이 인쇄됩니다 .file2
1
$0
및 1
is awk
에 대한 관용구를 인쇄합니다 .
답변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) 등으로 구성됩니다.