파일 비교 오류 - awk

파일 비교 오류 - awk

두 개의 파일이 있습니다 file1.txt. file2.txt열 2와 3을 기준으로 둘 모두에 공통된 레코드를 선택 file1.txt하고 이를 추가 열(열 4)에 복사하고 싶습니다.file2.txtout.txtfile2.txt

입력 예:

file1.txt

abc 1 a f11 f13 f14 
abd 2 b f12 f14 f13  
abe 4 d f13 f16 f12 
acf 5 s f14 f15 f19

file2.txt

abc 1 a f21 f23 f24 
abd 1 b f21 f24 f23  
abe 4 d f24 f26 f22 
acf 6 s f23 f25 f29

원하는 출력

out.txt

 abc 1 a f11 f13 f14 f21
 abe 4 d f13 f16 f12 f24

저도 비슷한 질문을 했어요질문3개의 파일을 활용하여 유사한 입력을 바탕으로 유사한 출력을 추출하는 방법에 대해서는 앞서 설명을 드린 바 있습니다. 저는 Unix 세계를 처음 접했고 파일 처리 방법을 배우고 있습니다. 이를 바탕으로 아래 코드를 사용해 보았 awk으나 성공하지 못했습니다. 누군가가 무엇이 잘못되었는지 확인하고 제안할 수 있습니까?

awk 'FILENAME == ARGV[1] {
    m[$2,$3] = 0; z[$2,$3] = $6;
    next;
}
{
    if (($2,$3) in m && m[$2,$3] == 1) {
        print $0 " " z[$2,$3] >"out.txt";
    }
}' file2.txt file1.txt

답변1

awk 'FNR==NR      {
                     a[$2, $3]=$4
                     next
                  }
     ($2, $3) in a{
                     print $0, a[$2, $3]
                  }
    ' file2.txt file1.txt > out.txt

가입하다

join -j 2 \
    <(sort -k2,3 file2.txt | sed 's/ /+/2') \
    <(sort -k2,3 file1.txt | sed 's/ /+/2') \
    -o 1.1,1.2,1.3,1.4,1.5,2.3 |
        sed 's/+/ /' > out.txt

답변2

귀하의 예에서는 값이 0인 배열 m을 생성합니다. 1로 설정할 수 없으며 설정할 필요도 없습니다. $0와 같이 전체 행에 값을 설정할 수 있습니다.
이 시도:

awk 'FILENAME == ARGV[1] {
    m[$2,$3] = $0;
    next;
}
{
    if (($2,$3) in m) {
        print m[$2,$3] " " $4 >"out.txt";
    }
}' file1.txt file2.txt

관련 정보