두 개의 입력 파일이 있습니다.
파일 1:
s2/80 20 . A T 86 F=5;U=4
s2/20 10 . G T 90 F=5;U=4
s2/90 60 . C G 30 F=5;U=4
파일 2:
s2/90 60 . G G 97 F=5;U=4
s2/80 20 . A A 20 F=5;U=4
s2/15 11 . A A 22 F=5;U=4
s2/90 21 . C C 82 F=5;U=4
s2/20 10 . G . 99 F=5;U=4
s2/80 10 . T G 11 F=5;U=4
s2/90 60 . G T 55 F=5;U=4
예상 출력:
s2/80 20 . A T 86 F=5;U=4 s2/80 20 . A A 20 F=5;U=4
s2/20 10 . G T 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4
논리: File1과 File2의 모든 행을 출력 파일로 연결하고 싶습니다. 상황: File1과 File2의 1, 2, 4번째 열이 정확히 일치하고 File2의 5번째 열에 점, 즉 "."이 있는 경우 또는 file2의 4번째 열과 정확히 일치하는 경우입니다.
암호: 스크립트를 사용해 보았습니다.
BEGIN{}
FNR==NR{
k=$1" "$2
a[k]=$4" "$5
b[k]=$0
c[k]=$4
d[k]=$5
next
}
{ k=$1" "$2
lc=c[k]
ld=d[k]
# file1 file2
if ((k in a) && ($4==$5) && (lc==$4)) print b[k]" "$0
}
그러나 내가 얻는 결과는 다음과 같습니다.
s2/80 20 . A T 86 F=5;U=4 s2/80 20 . A A 20 F=5;U=4
그리고 내 결과는 다음과 같아야 합니다.
s2/80 20 . A T 86 F=5;U=4 s2/80 20 . A A 20 F=5;U=4
s2/20 10 . G T 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4
귀하의 도움에 감사드립니다. 감사해요.
답변1
awk '
{
key = $1 SUBSEP $2 SUBSEP $4
}
# here, we are reading file1
NR == FNR {
f1_line[key] = $0
next
}
# here, we are reading file2
key in f1_line && ($5 == "." || $5 == $4) {
print f1_line[key], $0
}
' file1 file2
산출
s2/80 20 . A T 86 F=5;U=4 s2/80 20 . A A 20 F=5;U=4
s2/20 10 . G T 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4