2013-10-16 4 views
1

필자는 소스 파일과 대상 파일이 비슷하다고 생각합니다. 소스 파일에는 다음과 같은 정보 집합이 있습니다. 원본 및 대상 파일의 각 정보 집합을 비교해야합니다. 대상 파일에 누락 된 것이 있으면 해당 파일을 대상 파일에 기록해야합니다. 줄 단위로 일치시킬 수 있지만 원본 및 대상 파일 집합은 순서가 맞지 않습니다. 쉘 스크립트를 사용하여 달성하는 방법을 알려주십시오.유닉스 쉘 스크립팅

소스 파일 :

[Set.1] 
value=1 
date=today 

[Set.2] 
value=2 
date=today 

대상 파일 : 당신이 볼 수 있다면

[Set.2] 
value=2 

[Set.1] 
value=1 
date=today 

는, 날짜가 [설정 2] 목표 파일에없는, 그래서 내가에서 복사 할 필요가 소스 파일.

+0

두 파일의 데이터가 같거나 패턴이 같을 때 – suhas

+0

데이터가 동일합니다. 우리는 갭을 완전히 채워서 동일하게 만듭니다. – user1999315

답변

0

아래의 명령에 의해 file_set2에서 누락 된 것이 있으면 file_set2에 존재하는 것이 비교되고 file_set1은 file_set1에 복사되면 file_set2에 다시 복사됩니다.

awk 'FNR==NR{a[$0];next}!($0 in a)' file_set2 file_set1 >>file_set2 
+0

'date = today' 행이 두 파일 모두에 존재하지만 file_set2에 필요한 두 위치가 아니기 때문에 이것은 작동하지 않습니다. – msw

0

당신은

rsync /target/file/path /source/file/path 
+0

안녕하세요, rsync는 쉬운 옵션으로 보이지만 내 src-file은 일종의 델타 파일입니다. tgt_file에는 src-delta 파일에서 누락 된 필드에 대한 자세한 정보가 있습니다. src_file의 내용을 그대로 유지하면서 target_file을 복사하면됩니다. – user1999315

0

이것은 아주 쉬운 문제 하나 또는 하드 한 rsync를를 사용하여 시도 할 수 있습니다. 파일을 동일하게 만들려면

cp source_file target_file 

이면 충분합니다. 그러나 당신은 섹션의 순서를 그대로 유지하고자하는 것 같습니다 target_file 변경되지 않습니다. 이 경우 먼저 파일을 구문 분석해야합니다. 섹션의 순서를 기억하십시오.

Windows INI 파일 형식이므로 섹션을 순서대로 읽는 것이 중요합니다. 독자가 실제로 신경을 써야하는지 확인하십시오.

+0

입력 해 주셔서 감사합니다. 마찬가지로 아래에서 언급했듯이 src-file은 일종의 델타이므로 여러 개의 src 파일을 참조하여 tgt 파일을 업데이트합니다. 순서가 문제는 아니지만 세트 내의 데이터를 반복 할 수 있습니다. 그래서 tgt 파일을 grepping하는 동안 헤더 행을 염두에 두어야합니다 ... !! – user1999315