.

jsyong91의 이미지
김정균의 이미지

[user@machine shm]$ diff -urNp a.txt b.txt
--- a.txt       2014-06-26 23:38:10.423086691 +0900
+++ b.txt       2014-06-26 23:38:09.723075039 +0900
@@ -6,7 +6,7 @@ end
 
 start
 kkkk
-cccc
+cccd
 end
 
 start

이정도는 안될까요?

jsyong91의 이미지

그런데 제가 하고 싶은 것은 a.txt와 b.txt를 문단끼리 비교해서 다른 곳이 있을 경우 그 문단 전체를 출력해주고 싶습니다.
어떻게 방법이 없을까요??

쉘스크립트로 짜보고 있는데 너무 어렵네요

qiiiiiiiip의 이미지

1.
두 파일의 문단의 개수가 같고,
같은 위치의 두 문단을 비교하는 것이라면
스크립트를 짜서 간단히 해결.

2.
두 파일의 문단의 개수가 다르거나, 같더라도,
한쪽에만 있는 문단이 있거나하는 경우
문단을 한줄로 만들어서 diff 수행후,
다시 문단으로 변환하여 출력

qiiiiiiiip의 이미지

2번째 방법.

파일에는 _ 가 없다고 가정. ( 있으면 아래 스크립트에서 _를 다른 없는 문자로. )
문단은 빈줄(no space)로 구분.

$ diff <(perl -00pe 's/\n([^\n])/_\1/g' file1.txt) <(perl -00pe 's/\n([^\n])/_\1/g' file2.txt) | perl -pe 's,^< ,-file1.txt\n,;s,^> ,-file2.txt\n,;s,_,\n,g'
3c3
-file1.txt
start
kkkk
cccc
end
---
-file2.txt
start
kkkk
cccd
end
jsyong91의 이미지

정말 감사합니다~ 잘 동작하네요

그런데 죄송한데 bash가 아니라 csh에서 돌아가게 하려면 방법이 있을까요??

qiiiiiiiip의 이미지

shell을 타는 부분은 <( ) 인데,
csh 는 <( ) 를 지원하지 않아서, 한줄로 하기는 어렵습니다..

스크립트 파일을 따로 만들어서,
<( ) 안의 부분을 임시 파일로 출력하고
두개의 파일에 대해서 diff를 하시면 될듯.

예를 들어,

#!/bin/csh
perl .... file1.txt > temp1
perl .... file2.txt > temp2
 
diff temp1 temp2 | perl ....

이렇게 하시면 될듯요..

bacon의 이미지

awk의 RS나 perl의 $RS를 사용하면 문단단위로 읽을수 있으니 쉽게 처리가능하겠네요. 문단개수가 같다면 awk로 아래정도되겠네요.

awk 'BEGIN {
        RS = "\n\n\n*";
        while ((getline r1 <"file1.txt") > 0 && (getline r2 <"file2.txt") > 0) {
                if (r1 != r2) {
                        printf ("-file1.txt:\n%s\n\n", r1);
                        printf ("-file2.txt:\n%s\n\n", r2);
                }
        }
}'

한쪽파일에 남는부분 추가로 출력해주면 문단개수가 다른경우도 처리 되겠네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.