![awk는 2개의 파일을 비교하고 일치하는 줄과 0으로 채워진 일치하지 않는 줄을 인쇄합니다.](https://linux55.com/image/8263/awk%EB%8A%94%202%EA%B0%9C%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B9%84%EA%B5%90%ED%95%98%EA%B3%A0%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%EA%B3%BC%200%EC%9C%BC%EB%A1%9C%20%EC%B1%84%EC%9B%8C%EC%A7%84%20%EC%9D%BC%EC%B9%98%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%A4%84%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
두 개의 파일이 있습니다.
첫 번째 파일의 첫 번째 열을 두 번째 파일의 첫 번째 열과 일치시키고 싶습니다. 일치하는 항목이 있으면 두 번째 파일의 두 번째 열을 인쇄하고 싶습니다(0이 아닌 경우).
awk( )를 시도했지만 awk 'FNR==NR{a[$1]=$0;next} {print a[$1]}' 2.txt 1.txt
작동하지 않습니다.
F1.txt
A
B
C
D
E
F
G
H
I
J
F2.txt
A 0.5
E 1
H 0.5
J 1
예상 출력
A 0.5
B 0
C 0
D 0
E 1
F 0
G 0
H 0.5
I 0
J 1
답변1
입력 파일이 탭으로 구분되어 있다고 가정합니다.
$ join -a 1 -e 0 -t $'\t' -o 1.1,2.2 F1.txt F2.txt
A 0.5
B 0
C 0
D 0
E 1
F 0
G 0
H 0.5
I 0
J 1
join
두 개의 파일, 첫 번째 파일의 모든 행이 있는지 확인하고( -a
), 필드가 비어 있으면 "0" 값을 사용하고( -e
), 첫 번째 파일에서 첫 번째 필드를 가져오고, 두 번째 파일에서 첫 번째 필드를 가져옵니다. ( )의 두 번째 필드 -o
및 탭 문자를 구분 기호로 사용( -t
)
awk를 원한다면 다음과 같이 작성하겠습니다(파일 매개변수의 순서에 유의하세요).
awk 'BEGIN {FS=OFS="\t"} NR==FNR {v[$1]=$2; next} {print $1, (v[$1] ? v[$1] : 0)}' F2.txt F1.txt