
다음과 같은 2개의 열이 있는 큰 파일(~6백만 줄)이 있습니다.
1111.aaaaabbb.b.cccc.c ValueA
2222.dddddeee.e.ffff.f ValueB
3333.gggghhhh.h.iiii.i ValueC
이 단일 열 파일을 검색할 때 이것을 색인으로 사용하고 싶습니다.
aaaaabbb.b
dddddeee.e
gggghhhh.h
그리고 다음을 반환합니다:
ValueA
ValueB
ValueC
[...]
Valuen
보시다시피, 두 번째 파일의 내용이 첫 번째 파일의 내용과 정확하게 (정확하지는 않지만) 일치하는 한 첫 번째 기간 이후의 값에만 관심이 있으며 첫 번째 파일의 두 번째 값을 반환하고 싶습니다. 열 값 파일. 파일 2의 내용이 정확히 일치하는 한 첫 번째 파일 내용의 접두사/접미사는 신경 쓰지 않습니다.
이를 수행할 수 있는 방법 awk
이나 도구가 있습니까 ? bash
현재 Excel(Data to Column Tool)에서 데이터 형식을 올바르게 지정하려고 하는데 600만 개가 넘는 행이 있어서 수동으로 6개의 파일을 실행한 다음 결과를 함께 컴파일해야 하기 때문에 시간이 오래 걸립니다.
편집하다내용 file1
: 접두사는 항상 숫자이지만, 길이는 4자리에서 7자리까지 다양합니다. 첫 번째 마침표 뒤의 내용은 영숫자이며 길이는 4~15자이며 숫자나 문자로 시작할 수 있고 접미사도 숫자/문자일 수 있습니다.
답변1
인덱스가 있는 파일은 너무 크지 않고 메모리에 완전히 로드될 수 있다고 가정합니다. 그렇다면 다음을 사용할 수 있습니다 awk
.
awk -F"[. ]" 'FNR==NR{a[$0]=1} FNR!=NR&&a[$2"."$3]{print $NF}' index_file huge_file
awk
index_file
검색할 내용과huge_file
질문의 여러 줄이 포함된 두 개의 파일로 호출됩니다 .-F"[. ]"
awks 구분 기호를 공백과 점으로 설정합니다.FNR==NR
다음에만 적용됩니다.index_file
a[$0]=1
배열은 검색 패턴을 인덱스로 사용하여 배열을 채우고a
값을 로 설정하여 구성됩니다.1
FNR!=NR
에만 적용됩니다huge_file
.a[$2"."$3]
점으로 연결된 field2와 field3의 배열 인덱스가 존재하는 경우(패턴을 찾은 경우)...print $NF
파일의 마지막 필드를 인쇄합니다.
산출:
ValueA
ValueB
ValueC