두 개의 파일이 있습니다.
파일 1
212 21 24.8 13.8354303 15.2841303
258 21 22.2 15.8507278 17.2994278
270 21 27.8 13.0482192 14.4969192
204 21 22.4 13.9465939 15.3952939
248 21 16.6 9.2714745 11.6494745
279 21 22.8 12.9151566 15.2931566
파일 2
212 21 24.8 1.03 2.8954
258 21 22.2 1.03 2.8954
270 21 27.8 1.05 2.9154
204 21 22.4 1.21 3.0754
248 21 16.6 1.29 3.1554
279 21 22.8 1.47 3.3354
다음 방법으로 두 가지 모두에 참여해야 합니다.
212 21 24.8 13.8354303 15.2841303 1.03 2.8954
258 21 22.2 15.8507278 17.2994278 1.03 2.8954
270 21 27.8 13.0482192 14.4969192 1.05 2.9154
204 21 22.4 13.9465939 15.3952939 1.21 3.0754
248 21 16.6 9.2714745 11.6494745 1.29 3.1554
279 21 22.8 12.9151566 15.2931566 1.47 3.3354
그러나 나는 다음 awk
명령을 사용했습니다.
awk 'NR==FNR{a[$1]=$4 FS $5;next}$1 in a{print $1,$2,$3,$4,$5,a[$1]}' File2 File1 > output
나는 이 파일을 얻었다:
산출
212 21 24.8 13.8354303 15.2841303
1.03 2.8954
258 21 22.2 15.8507278 17.2994278
1.03 2.8954
270 21 27.8 13.0482192 14.4969192
1.05 2.9154
204 21 22.4 13.9465939 15.3952939
1.21 3.0754
248 21 16.6 9.2714745 11.6494745
1.29 3.1554
279 21 22.8 12.9151566 15.2931566
1.47 3.3354
내가 뭘 잘못하고 있는지 모르겠습니다. 내 파일에는 약 400줄이 있습니다.
답변1
데이터가 정렬되었다고 가정하면 이 경우 join
다음 명령을 사용합니다.
join -o 1.1 1.2 1.3 1.4 1.5 2.4 2.5 file1.txt file2.txt
212 21 24.8 13.8354303 15.2841303 1.03 2.8954
258 21 22.2 15.8507278 17.2994278 1.03 2.8954
270 21 27.8 13.0482192 14.4969192 1.05 2.9154
204 21 22.4 13.9465939 15.3952939 1.21 3.0754
248 21 16.6 9.2714745 11.6494745 1.29 3.1554
279 21 22.8 12.9151566 15.2931566 1.47 3.3354
스타일을 사용하여 형식을 지정할 수 있습니다 -o
. x.y
여기서는 x
파일이고 y
필드입니다.
답변2
참고하시기 바랍니다가입하다올바른 결과 file1과 file2는 먼저 첫 번째 필드를 기준으로 정렬되어야 합니다.
케이스가 없고 질서를 유지하고 싶은 경우
awk '
FNR==NR{a[$1]=$4 OFS $5; next}
$1 in a{print $0, a[$1]}
' OFS='\t' file2 file1