내 질문은 두 개의 개별 파일에서 두 줄을 비교하는 방법입니다. 기본적으로 두 개의 파일이 있는데 file1에는 다음 줄이 포함되어 있습니다.
${X##*a}
file2에는 다음 줄이 포함되어 있습니다.
baaabaabab
내가 시도한 것은 다음과 같습니다.
diff -u file1 file2 > file3
aaaa
그러나 그것은 마땅한 만큼 주지 않습니다 . 또한 두 파일이 항상 동일하지는 않지만 차이점은 항상 줄의 시작 부분에 있습니다.
내 프로그램을 수정하여 이제 하나는 with aaaabaaabaabab
이고 다른 하나는 2개의 vars를 갖게 되었습니다 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