잠시 앉아서 내 file1은 다음과 같습니다.
A S
B Q
파일 2는 다음과 같습니다.
B 2
file2의 $1을 $1 file1과 일치시키고 file1 $2 && file2 $2를 인쇄하고 싶습니다. 출력은 다음과 같습니다.
Q 2
내 awk
솔루션은 다음과 같습니다
awk 'NR==FNR {a[$1]=$1$2;next} $1 in a {print $2, a[$2]}' file2 file1
그것은 단지 나에게 제공합니다 Q
- 배열의 두 번째 요소를 인쇄하지 않습니다.
배열의 요소를 인쇄하는 방법은 무엇입니까?
편집하다
더미 예제에서 작동했던 답변이 실제 데이터에서는 작동하지 않았기 때문에 질문을 업데이트했습니다.
f1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
f2
ENSG00000236824.1 AAAAAAA
더하기 기호를 일치 f2 $1
시켜 f1 $3
인쇄하고 싶습니다.f1 $0
f2 $2
이 답변을 시도했지만 awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$1]}' f2 f1
여전히
원하는 결과를 얻지 못했습니다.
awk
위의 코드는 다음과 같은 정보만 제공합니다.
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
답변1
거의 다 왔습니다. 배열 인덱스를 $1로 변경하면 됩니다. 이는 두 파일의 공통 요소입니다.
awk 'NR==FNR {a[$1]=$2;next} $1 in a {print $2, a[$1]}' file2 file1
$2만 필요한 것 같으니 왜 $1$2를 배열에 넣었는지 잘 모르겠습니다.
고쳐 쓰다질문에 따라 편집되었습니다.
f2 $1
"match " 를 명시적으로 배치했으므로 f1 $3
(모든 질문이 명확했으면 좋겠습니다) 코드에 그에 맞게 작성하세요.
f2 $1 f1 $3
| |
awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$3]}' f2 f1