내 문제의 단순화된 버전은 file2
키가 file1
.
예를 들어:
file1
(열쇠 포함)
a
d
f
file2
(키 값 파리 포함)
a=1
b=2
c=3
d=4
f=5
g=6
예상 출력:
a=1
d=4
f=5
내가 시도한 것:
cat file1 | xargs -I % grep "^%=" file2
이 접근 방식은 잘 작동하지만 파일이 큰 경우 성능이 저하됩니다. (예를 들어 file1에는 12k 라인이 있고 file2에는 20k 라인이 있습니다)
가장 좋은 접근 방식은 무엇입니까?
답변1
awk를 시도해 볼 수 있습니다.
$ awk 'NR==FNR{keys[$1]; next} $1 in keys' file1 FS='=' file2
a=1
d=4
f=5
답변2
GNU를 사용 join
하고 다음을 수행하십시오 bash
.sort
join -t '=' <(sort file1) <(sort file2)
산출:
a=1 d=4 f=5
답변3
grep -f
이것이 하는 일 입니다 :
$ grep -f file1 file2
a=1
d=4
f=5
file1
file2
그러나 이는 바로 앞이 아닌 줄의 어느 곳에서나 키를 검색합니다 =
. 실제 데이터에서는 작동하지 않을 수 있습니다.