comm을 사용하여 요소는 동일하지만 타임스탬프가 다른 로그 파일을 일치시키는 방법은 무엇입니까?

comm을 사용하여 요소는 동일하지만 타임스탬프가 다른 로그 파일을 일치시키는 방법은 무엇입니까?

어떤 응용 프로그램이 설치되었지만 제거되지 않았는지 확인하기 위해 comm 명령을 사용하여 두 로그를 비교하려고 합니다. 가능하다면 awk를 사용하고 싶지 않습니다. 다음은 예제 파일입니다:

설치하다:

2009-03-21 11:43:21 install flex-old:amd54 <none> 3.7.4a-10ubuntu1
2009-03-22 22:55:08 install libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

삭제:

2009-03-24 19:53:49 remove libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

따라서 차별화를 위해 주목해야 할 것은 바로 '플렉스-올드' 시리즈다. 몇 가지 다른 변형을 포함하여 제가 시도한 내용은 다음과 같습니다.

comm -23 <(sort install.txt) <(sort removed.txt) > difference.txt

이렇게 하면 제거된 목록에서 흔하지 않은 목록뿐만 아니라 설치된 모든 목록이 출력됩니다. 나는 또한 다음을 시도했습니다.

comm -3 <(cut -d " " -4f sort install.txt | uniq) <(sort removed.txt | uniq) > what.txt

그러나 이렇게 하면 두 앱 모두에 대한 모든 앱이 출력되지만 설치 시 직접 제거됩니다.

답변1

당신은 나와 매우 가까운 것 같습니다. 샘플에 따르면 다음 1개의 안감이 있습니다.

comm -23 <(sort install.txt | cut -d" " -f4) <(sort removed.txt | cut -d" " -f4)

나를 위해 다음 출력을 생성했습니다.

flex-old:amd54

참고: 조정이 필요할 수 있습니다 comm -23. 예를 들어 comm -3다음과 같은 내용이 필요할 수 있습니다.

테스트하기 위해 무엇을 했습니까? 먼저, 테스트하기 위해 명령을 분석했습니다. 나는 다음과 같이 시작했습니다:

cut -d " " -4f sort install.txt

이것은 분명히 깨진 것이므로 다음과 같이 수정했습니다.

sort install.txt | cut -d" " -f4

그 후 (내 경험상) 추가 테스트 없이 코드 한 줄을 다시 작성할 수 있었습니다. 실패하면 기본적인 테스트를 해서 comm무엇이 문제인지 알아보겠지만 이번에는 그럴 필요가 없습니다:]

관련 정보