我有一个包含两行的文件,例如:
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
脚本或其他东西来一次性完成它。