텍스트 변경 사항을 계산하는 방법

텍스트 변경 사항을 계산하는 방법

첫 번째 텍스트를 이미 알고 있는데 첫 번째 텍스트와 두 번째 텍스트를 가져와 두 번째 텍스트를 작성하는 방법에 대한 최소한의 지침을 제공하는 알고리즘을 아는 사람이 있습니까?

예를 들어 "uptime"의 출력은 다음과 같습니다.

16:18  up 1 day, 12:15, 4 users, load averages: 2.23 2.66 2.53

1분 후:

16:19  up 1 day, 12:16, 4 users, load averages: 2.23 2.66 2.53

이 경우 유일한 변화는 시간이다.

모든 형식의 출력이 허용됩니다.다음 예는 첫 번째 행에서 두 번째 행을 작성하는 데 사용되는 정보를 구조화하는 방법에 대한 내 아이디어 중 하나일 뿐입니다.


첫 번째 가동 시간 호출을 두 번째 호출과 비교할 때의 출력 예:

4:1:9
21:1:6

4:1:9 (4번째 위치에 "9" 추가 - 1글자 삭제)

21:1:6 (위치 21 - 삭제할 문자 1개에 "6" 추가)


어쩌면 git에서 몇 가지 명령을 사용할 수도 있겠지만, 쉘 스크립트를 실행할 수 있는 모든 시스템에서 실행될 수 있는 가장 간단한, 가능한 종속성 없이 가능한 솔루션을 찾고 있습니다.


내가 하려는 작업을 더 잘 이해하기 위해 업데이트하세요.

이 diff 솔루션은 바이트를 절약하는 데 필요합니다. Trafikito.com 에이전트는 서버에서 실행 중이며 일부 명령(예: uptime free -m등)의 출력을 API 엔드포인트로 보냅니다. 이는 1분에 한 번씩 발생하며 서버로의 일부 아웃바운드 트래픽을 생성합니다. 차이점만 전송하여 네트워크의 공간을 줄이고 싶습니다. 그리고 대부분의 경우 전체 출력에서 ​​소수의 숫자만 변경됩니다.

diff- 이 도구는 한 줄씩 비교하므로 uptime한 줄만 출력하는 명령에는 적합하지 않습니다.

cmp- 도구는 바이트 단위로 비교하지만 명령의 출력이 큽니다. 해당 바이트가 문자열 시작 부분에 삽입되면 앞으로 나올 모든 바이트의 차이가 표시됩니다. 나머지 콘텐츠를 모두 이동하고 x 위치에 새 콘텐츠를 삽입하는 모습만 보여줄 수도 있습니다.

답변1

다음 사항을 고려해 보셨나요 cmp?

cmp -lb file[12]
 5  70 8     71 9
22  65 5     66 6

답변2

$ diff -e uptime1 uptime2
1c
16:19  up 1 day, 12:16, 4 users, load averages: 2.23 2.66 2.53
.

diff -eed첫 번째 파일을 두 번째 파일로 변환하는데 적합한 스크립트를 출력합니다 . 전체 행만 추가, 삭제 또는 변경합니다.

스크립트를 생성하고 적용합니다.

$ diff -e uptime1 uptime2 >diff.ed

후에:

$ { cat diff.ed; echo ',p'; } | ed -s uptime1 >newfile

그러면 의 내용이 uptime1의 내용으로 변환됩니다 uptime2. 결과 파일을 표준 출력에 쓴 다음 에 저장하는 echo ',p'것 입니다 .ednewfile

또는 이 유틸리티를 사용하여 diff네 가지 출력 유형(일반, 균일, 컨텍스트 및 ed) 중 하나를 적용할 수 있습니다 patch.

$ patch uptime1 <diff.ed
Hmm...  Looks like an ed script to me...
Patching file uptime1 using Plan A...
Hmm...  Ignoring the trailing garbage.
done

diffpatch시스템 설명서를 참조하세요 .

관련 정보