![최신 텍스트 파일에서 이전 텍스트 파일 빼기](https://linux55.com/image/162823/%EC%B5%9C%EC%8B%A0%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%9D%B4%EC%A0%84%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%20%EB%B9%BC%EA%B8%B0.png)
새 파일에서 파일의 이전 복사본 내용을 제거하는 방법은 무엇입니까?
예를 들어:
메일 파일이 주어지면 메일 파일의 복사본을 만들고 복사본에 대한 작업을 수행합니다. 작업 과정에서 원본 메일 파일의 크기가 증가합니다. 새 파일에서 오래된 파일에 저장된 오래된 메시지를 삭제하는 방법.
줄 수를 세어 새 파일의 맨 위에서 제거할 수 있을까요? bash에서 쉽게 할 수 있는 방법이 있나요?
감사해요.
답변1
파일이 동일한 형식(Linux에서는 대문자를 포함해야 함)이라고 가정하면(예: 한 줄에 하나의 이메일 주소) comm
원하는 작업이 수행됩니다.
$ cat old <(echo '--') new
[email protected]
[email protected]
[email protected]
[email protected]
--
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
$ comm -i13 <(sort old) <(sort new)
[email protected]
[email protected]
[email protected]
옵션은 ( ) 에만 주소를 표시하지 않고 두 파일 모두 ( ) 에 주소를 표시하지 않도록 -13
지시합니다 . 따라서 출력에는 찾은 주소만 표시됩니다.comm
old
-1
-3
오직존재하다 new
.
BSD를 사용 중이고 파일이 아직 대소문자에 대해 정규화되지 않은 경우 의 comm
스위치를 추가하여 대소문자를 구분하지 않는 일치를 수행할 수 있습니다.-i
답변2
라인에서 인쇄 시작을 사용할 수 있습니다 tail -n+<NUM_LINE> file
.file
NUM_LINE
mailfile1
mailfile2
결과가 저장되는 행 수를 삭제하려면 다음을 수행하십시오 mailfile2.new
.
tail -n+$(( $(wc -l <mailfile1) + 1)) mailfile2 > mailfile2.new
wc -l <mailfile1
인쇄 라인 수mailfile1
$(( $(wc -l <mailfile1) + 1))
mailfile1
+1로 줄 수를 인쇄하십시오.