두 개의 개별 파일에서 두 줄을 비교하는 방법은 무엇입니까?

두 개의 개별 파일에서 두 줄을 비교하는 방법은 무엇입니까?

내 질문은 두 개의 개별 파일에서 두 줄을 비교하는 방법입니다. 기본적으로 두 개의 파일이 있는데 file1에는 한 줄이 포함되어 있습니다.

${X##*a}

file2에는 한 줄이 포함됩니다.

baaabaabab

내가 시도한 것은 다음과 같습니다.

diff -u file1 file2 > file3

aaaa그러나 이것은 원하는 결과를 제공하지 않습니다 . 또한 두 파일이 항상 동일한 것은 아니지만 차이점은 항상 줄의 시작 부분에 있습니다.


aaaabaaabaabab이제 두 개의 변수(하나는 with , 하나는 with ) 를 갖도록 프로그램을 수정했습니다 a. 이제 다음을 수행할 수 있습니다.

echo ${var1##*$var2} > tempfile.txt

임시 파일 에는 baaabaabab. aaaa나는 생각 중입니다:

echo ${var1//*$var2} > tempfile.txt

그러나 이것은 작동하지 않습니다.

답변1

diff행 단위로 작업합니다. 따라서 diff는 한 문자라도 다른 경우 행이 다른 것으로 간주합니다.

귀하의 경우, 할 수 있는 한 가지는 각 문자가 한 줄에 있도록 입력 데이터를 변환하는 것입니다. 이 fold명령이 도움이 됩니다. 그래서 당신은 이것을 할 수 있습니다 :

$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$ 

이는 입력 파일에 실제로 파일당 한 줄만 있는 경우에만 작동합니다.

이 출력 형식이 귀하에게 유용할지 모르겠습니다. 정말로 "aaaa" 문자열을 원하고 그 차이가 다음과 같다고 확신한다면오직입력 라인의 한 지점에서 다음을 통해 위의 출력을 파이프할 수 있습니다 awk.

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$

답변2

다음은 Perl을 사용하여 첫 번째 파일의 내용에서 두 번째 파일의 내용을 제거한 다음 첫 번째 파일의 나머지 내용을 출력 파일에 인쇄하는 방법입니다.

perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt

관련 정보