두 파일을 교묘하게 병합하는 방법이 있나요? [복사]

두 파일을 교묘하게 병합하는 방법이 있나요? [복사]

일부 줄이 동일한 두 개의 파일이 있습니다.

파일 A:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}

파일 B:

command 5
command 3
command 1{
    some code lines
}

나는 다음을 포함하는 최종 파일을 원합니다:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}
command 5

줄의 순서는 중요하지 않습니다. 이 작업을 수행할 수 있는 기존 도구(또는 명령)가 있습니까?

답변1

나는 이것이 코멘트 답변이어야 한다는 것을 알고 있습니다.

이 작업을 수행할 수 있는 도구가 있는지 기억이 나지 않습니다.하지만! 파일을 분류한 다음 sort및 를 사용하여 작업을 수행하면 uniq정확한 효과를 얻을 수 있습니다.

cat A B | sort | uniq

그러면 두 파일의 내용이 합쳐진 다음 줄이 정렬되고 중복된 내용이 제거됩니다.

결과 출력:

command 1
command 2
command 3
command 4
command 5

답변2

내가 아는 한 당신이 보여준 방식으로 파일을 병합할 수 있는 도구는 없습니다. 대부분의 병합/비교 도구는 두 파일이 서로 다른 위치에 함께 배치될 수 있다는 것을 도구가 알 수 있도록 줄 주위에 일정 수준의 컨텍스트를 가짐으로써 작동합니다.

당신이 보여주는 것은 실제 맥락이 없기 때문에 이러한 도구가 어떻게 이 작업을 수행할 수 있는지 모르겠습니다.

답변3

다음을 수행할 수 있습니다.

sed -e 's/_/_u/g;s/%/_p/g;/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr '%\n' '\n%' |
  sed 's/%//g;s/_p/%/g;s/_u/_/g'

파일에 해당 %문자가 포함되어 있지 않으면 다음과 같이 단순화할 수 있습니다.

sed -e '/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr -d '\n' |
  tr % '\n'

관련 정보