2014-06-24 6 views
3

Linux에서 어떻게 편향을합니까? DIFF의Linux에서 일방적 인 diff를 수행하려면 어떻게해야합니까?

정상 동작 :

일반적으로, 사랑하는 당신에게 두 개의 파일 사이의 모든 차이를 말할 것이다. 예를 들어, 파일 B에없는 모든 내용을 알려주고 파일 B에는 있지만 파일 A에는없는 모든 내용을 알려줍니다. 예 :

파일 A에는 다음과 같은 내용이 포함됩니다.

cat 
good dog 
one 
two 

파일 B에는 다음이 포함

cat 
some garbage 
one 
a whole bunch of garbage 
something I don't want to know 

나는 정기적 DIFF을 할 경우 다음과 같이

내가 무엇을 찾고

2c2 
< good dog 
--- 
> some garbage 
4c4,5 
< two 
--- 
> a whole bunch of garbage 
> something I don't want to know 

: 예를 들어, 내가 원하는 것은 단지 첫 번째 부분은

이다 나는 무언가 같이

사랑하는 AB

출력 될 것이다 파일 A에는 있지만 파일 B에는없는 모든 것을 알고 싶습니다. 그러나 파일 B에는 있지만 파일 A에는없는 모든 것을 무시하고 싶습니다.

내가 원하는 것은 명령 또는 일련의 명령입니다.

???? 출력 생산 AB

: 나는 해결책이 나오지 또는 AWK로 DIFF의 출력을 파이프하여 달성 할 수 있으리라 생각합니다

2c2 
< good dog 
4c4,5 
< two 

을,하지만 난 그 도구를 충분히 익숙하지 않은 생각은 가지고 올 해결책. 기본적으로 --- 및>로 시작하는 모든 줄을 제거하려고합니다.

편집 : 예를 편집하여 라인의 여러 단어를 설명했습니다.

참고 :이의 "하위 질문"입니다 : Determine list of non-OS packages installed on a RedHat Linux machine

참고 :이 유사하지만, 여기 묻는 질문과 동일하지 않습니다 (예를 들어,하지 속는) : One-way diff file

+1

이 슈퍼 유저 질문 같은 느낌을 줄 것입니다. –

답변

3

diff A B|grep '^<'|awk '{print $2}'

grep '^<'은 행을 선택하여 파일이 한 줄의 개체 만 구성되어있는 경우, 두 번째 열

+1

고맙습니다. 저를 올바른 길로 인도하십시오. print $ 2의 문제점은 나중에 나오는 단어를 무시한다는 것입니다. 예를 들어 파일 A와 개에 "good dog"을 넣으면, 명령의 첫 번째 부분이 내가 원하는 것을 얻는 것으로 나타납니다. 예를 들어 다음 명령 : diff AB | grep '^ <' – Jonathan

+1

@Jonathan 이것을 시도하십시오 : diff AB | grep '^ <' 'cut -c 3- – leo108

2

대안을 선택 <

awk '{print $2}' 수단으로 시작을 의미합니다 , 출력 순서는 중요하지 않습니다 (이 문제는 분명하지 않습니다).

comm -23 <(sort A) <(sort B) 

comm은 입력을 정렬해야하고 -2은 "두 번째 파일에 고유 한 선을 표시하지 않음"을 의미하는 반면 -3은 "둘 사이에 공통적 인 선을 표시하지 않음 파일 ". grep 비트가 정말 필요하지 않지만

당신이 "차이"가 발생하는 순서로 제시 할 필요하면하지만, 위의 diff/awk 솔루션은 괜찮습니다 (- 그것은 diff A B | awk '/^</ { $1 = ""; print }'

. 편집 : - 코멘트에 명시된 바와 같이

2

는 하나 대부분 정답이 있지만

diff A B | grep '^<' 

입니다 ... 내가 뒤로 처음 읽을 라인의 설정 고정보고하기 출력을

< good dog 
< two 

보다는

2c2 
< good dog 
4c4,5 
< two