첫 번째 파일의 순서와 짝이 없는 줄을 유지하면서 두 개의 텍스트 파일을 첫 번째 열에 연결합니다.

첫 번째 파일의 순서와 짝이 없는 줄을 유지하면서 두 개의 텍스트 파일을 첫 번째 열에 연결합니다.

가지고 있는 두 개의 파일을 병합해야 하는데, 병합하기 전에 먼저 파일이 일치해야 합니다. 이것은 내 첫 번째 파일이며 100만 줄이 포함되어 있습니다.

abcde
fghi
jklmn
opqrs
123456
0000

두 번째 파일에는 300만 줄이 포함되어 있지만 여전히 첫 번째 파일의 문자열이 포함된 일부 줄이 있습니다.

543123:fdfdss
dfskld:533fg
abcde:1234
fdskls:fkdfs
gfdkls:flfds
0000:5432
fdsk:saakl

산출:

abcde:1234
fghi
jklmn
opqrs
123456
0000:5432

출력이 file1:file2가 되기를 원하지만, 이는 file2의 첫 번째 열과 file1의 문자열과 일치하는 경우에만 가능합니다. 정렬 형식을 엉망으로 만들고 싶지 않고 이 순서로 정렬하고 싶고 file1 문자열을 유지하면서 일치하는 문자열만 추가하고 싶습니다.

답변1

쉬운 방법은 awk두 번째 파일을 읽고 각 줄을 배열(인덱스는 $1)에 저장한 다음 첫 번째 파일을 읽을 때 해당 줄이 이미 배열의 인덱스인지 확인하는 것입니다. 그렇다면 해당 줄을 다음으로 바꾸십시오. 해당 요소의 값:

awk -F: 'NR==FNR{z[$1]=$0;next}
($0 in z) {$0=z[$1]};1' file2 file1

이 작업을 수행할 수도 있지만 더 많은 작업이 필요합니다(기본적으로 결과를 정렬 하고 순서를 복원 join하려면 첫 번째 파일의 줄에 번호를 매깁니다 ).join

join -a 1 -t: -1 2 -2 1 <(nl -s: -ba -nrz file1 | sort -t: -k2,2) \
<(sort -t: -k1,1 file2) | sort -t: -k2,2 | cut -d: -f1,3-

관련 정보