파일 정렬 및 참여

파일 정렬 및 참여

두 개의 파일이 있습니다. 파일을 정렬하고 첫 번째 열에 가입하고 싶습니다. 예를 들어:

첫 번째 파일:

100.   ttt
200.   616te
300.   7a27
       7373qq

두 번째 파일:

100.   ttt
200.   yoga
300.   7a27
       8371gd

이 두 파일을 결합하기 위해 다음을 수행합니다.

join <(sort first_file.txt) <(sort second_file.txt) >joined.txt

내가 얻고 싶은 결과는 다음과 같습니다.


100.   ttt.      ttt
200.   616te.    yoga
300.   7a27.     7a27
       7373qq.   8371gd

그런 다음 열 2와 열 3이 다른 행을 보고 싶습니다. 이를 위해 나는 다음을 수행합니다.

awk '$2!=$3 {print $1, $2, $3}' joined.txt >different.txt

보시다시피 처음 두 파일의 값 중 일부는 비어 있습니다. 그래서 Join을 사용하면 다음과 같은 오류가 발생합니다.

join: /dev/fd/63:26456: is not sorted: 100  7373qq
join: /dev/fd/62:23295: is not sorted: 100  8371gd

이 문제를 어떻게 처리해야 합니까? 통찰력을 높이 평가하겠습니다.

답변1

이것이 필요한 전부가 아닌 경우 원하는 효과가 없는 경우를 포함하여 보다 실제적인 예시 입력 및 예상 출력을 제공하도록 질문을 편집하십시오.

$ paste file1 file2 | sed 's/\t[^ ]* */.\t/'
100.   ttt.     ttt
200.   616te.   yoga
300.   7a27.    7a27
       7373qq.  8371gd

위의 중간 출력과 최종 비교 출력이 필요한 경우 다음을 수행하십시오.

$ paste file1 file2 | sed 's/\t[^ ]* */.\t/' | tee intermediate | awk '($NF".")!=$(NF-1)'
200.   616te.   yoga
       7373qq.  8371gd

또는 이렇게 하지 않는 경우:

$ paste file1 file2 | awk '{sub(/\t[^ ]* */,".\t")} ($NF".")!=$(NF-1)'
200.   616te.   yoga
       7373qq.  8371gd

.또는 실제로 두 번째 필드 값 끝에 추가할 필요가 없는 경우 :

$ paste file1 file2 | awk '{sub(/\t[^ ]* */,"\t")} $NF!=$(NF-1)'
200.   616te    yoga
       7373qq   8371gd

관련 정보