파일의 두 줄을 비교하고 마지막 줄을 수정합니다.

파일의 두 줄을 비교하고 마지막 줄을 수정합니다.

다음과 같은 두 줄의 파일이 있습니다.

XXXXXXX20170412,bu.1519=1,bu.1124=2,bu.1284=3,bu.1767=13,bu.1869=15,bu.1784=16,bu.1473=32,bu.1264=43,bu.1758=96,bu.1649=122,bu.1345=140,bu.1268=215,bu.1246=516,bu.1876=601,
XXXXXXX20170413,bu.1123=1,bu.1767=27,bu.1784=32,bu.1473=57,bu.1869=41,bu.1264=91,bu.1284=54,bu.1758=191,bu.1268=387,bu.1345=319,bu.1649=322,bu.1246=1199,bu.1876=1383,

첫 번째 줄(", 및=" 사이의 문자열로 시작)에 모든 문자열이 있고 마지막 줄에는 존재하지 않는 모든 문자열을 가져와 마지막 줄 끝에 추가하고 싶습니다.

답변1

키가 와 %h사이의 문자열인 해시를 형성합니다 . 이는 첫 번째 줄에 대해서만 형성됩니다. 그런 다음 두 번째 줄에서는 이러한 키가 두 번째 줄에 있는지 검색하고 찾을 수 없는 키를 수집하여 쉼표로 묶습니다.,=join

perl -F, -lpe '
   $. == 1 and %h = /,([^=]*)=([^,]*)/g, next;
   $l = $_;
   $_ .= join ",", grep $l !~ /,\Q$_=/, keys %h;
' your_2-line_file

결과

XXXXXXX20170412,bu.1519=1,bu.1124=2,bu.1284=3,bu.1767=13,bu.1869=15,bu.1784=16,bu.1473=32,bu.1264=43,bu.1758=96,bu.1649=122,bu.1345=140,bu.1268=215,bu.1246=516,bu.1876=601,
XXXXXXX20170413,bu.1123=1,bu.1767=27,bu.1784=32,bu.1473=57,bu.1869=41,bu.1264=91,bu.1284=54,bu.1758=191,bu.1268=387,bu.1345=319,bu.1649=322,bu.1246=1199,bu.1876=1383,bu.1519,bu.1124

답변2

파일을 두 개로 분할하고 각 줄에는 한 줄이 포함됩니다. 그런 다음 쉼표로 줄을 나누었습니다. 그런 다음 diff를 실행하고 결과를 복사하여 다시 한 줄로 합칩니다.에 비올라.

그것은 먼 길입니다. 나는 당신이 어떤 종류의 awk스크립트나 그것을 단번에 수행할 수 있는 것을 작성할 수 있다고 확신합니다 .

관련 정보