비슷한 줄 구별하기

비슷한 줄 구별하기

두 파일의 첫 번째 단어가 동일하고 나머지 단어가 다른 줄 목록을 인쇄하고 싶습니다. 그리고 다소 복잡한 혼란이 있을 수 있지만 comm더 간단한 방법이 있기를 바랍니다.grepcut

편집하다: 나는 뭔가를 하나로 묶었습니다작업 코드. 테스트 예:

$ cat file1
a 1 E
b 2 F
c 3 G

$ cat file2
a M X
b 2 Y
c 3 G

$ difff 1 file1 file2 # Differences in fields 2+3
1,2c1,2
< a 1 E
< b 2 F
---
> a M X
> b 2 Y

$ difff 1-2 file1 file2 # Differences in field 3 only
1c1
< b 2 F
---
> b 2 Y

편집 2: 이제 속도는 견딜만 합니다(1800줄과 8700줄의 두 파일을 비교하는데 0.5초).

답변1

file1과 가 모두 정렬되어 있다고 가정합니다 file2(그렇지 않으면 join작동하지 않습니다).

diff -u file1 file2 |
  grep -E "^[+-]($(echo $(join -o0 file1 file2) | tr ' ' '|'))"

설명하다:

join명령은 두 파일에 나타나는 연결된 필드(즉, 두 파일에서 같은 줄의 첫 번째 단어)를 한 줄에 하나씩 출력합니다. echo그러나 모든 공백을 tr파이프 문자( )로 바꿉니다. ( 결과를 직접 파이핑하는 대신 ) |약간 더 복잡한 작업을 수행하는 이유 는 출력의 끝에 개행 문자가 있기 때문입니다.echojointrjoin아니요튜브로 바꾸고 싶어요.

예제 파일(질문을 편집하기 전에 OP가 원래 제공한 것), join, echo, trthingy는 을 생성합니다 . 이는 필터링 bar|foo에 대한 확장 정규식의 일부로 사용되는 출력입니다 .grep -Ediff -u

명령줄의 출력은 다음과 같습니다.

-bar c d
+bar x y

관련 정보