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

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

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

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한 번에 어떤 종류의 스크립트나 그것을 할 수 있는 것을 작성할 수 있다고 확신합니다 .

관련 정보