![두 개의 개별 파일에서 두 줄을 비교하는 방법은 무엇입니까?](https://linux55.com/image/76457/%EB%91%90%20%EA%B0%9C%EC%9D%98%20%EA%B0%9C%EB%B3%84%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%91%90%20%EC%A4%84%EC%9D%84%20%EB%B9%84%EA%B5%90%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 질문은 두 개의 개별 파일에서 두 줄을 비교하는 방법입니다. 기본적으로 두 개의 파일이 있는데 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