ファイル内の2行を比較し、最後の行を変更する

ファイル内の2行を比較し、最後の行を変更する

次のような 2 行のファイルがあります:

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までの文字列をキーとするハッシュを作成します。これは最初の行に対してのみ作成されます。次に、2 行目で、これらのキーが 2 行目に存在するかどうかを検索し、見つからないキーを収集して、カンマで囲みます。,=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

ファイルを2つに分割し、それぞれに1行ずつ含めます。次に、行をカンマで分割します。次に、diffを実行して結果をコピーし、1行に結合します。と ヴィオラ

それは遠回りです。awk一気に実行できるスクリプトか何かを書けばいいと思います。

関連情報