두 개의 파일이 있습니다. 파일을 정렬하고 첫 번째 열에 가입하고 싶습니다. 예를 들어:
첫 번째 파일:
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