比較文件中的兩行並修改最後一行

比較文件中的兩行並修改最後一行

我有一個包含兩行的文件,例如:

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,

我想要獲取第一行中存在的所有字串(從 ", and= 之間的字串開始)並且最後一行中不存在的所有字串,並將它們附加到最後一行的末尾。

答案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腳本或其他東西來一次完成它。

相關內容