ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用Perl搜索重复的行

用Perl搜索重复的行

原创 Linux操作系统 作者:perltest 时间:2011-04-23 23:48:17 0 删除 编辑

在HIS的运行中,最近两个月设置保存了药房发药流水记录,用来排查可能出现的问题。

前段时间发现,在极个别的情况下,会出现对某个处方重复发药。为了找到原因,需要在几万行的记录中,定位出问题的处方编号,在经过整理去掉了发药时间、库存数量等信息后,保存到一个临时文件中的记录格式形式如下:

... ...
noteid=110331123127 medid=110309153426
noteid=110331140230 medid=110220100028
noteid=110331140230 medid=110321092257
noteid=110331140230 medid=110214102625
noteid=110331140230 medid=110329101342
noteid=110331140230 medid=110113150948
noteid=110331140230 medid=101012143139
noteid=110331141148 medid=110214103124
noteid=110331143127 medid=110221100743
noteid=110331143127 medid=110328093237
... ...

也就是只保留了处方编号和药品编号,对重复发药的情况,相同的处方编号里会存在重复的药品编号。
也就是只要在这临时文件中分析出重复的行,就可以判断有问题的处方编号了。

如果自己编程,应该可以实现,但算法比较复杂。在网上搜索,发现一个使用Perl用来消除重复行的例子:

perl -n -e 'if ( /^\s*$/){print; next};if (exists($hash{$_})) { print } else { $hash{$_}=1; next }' filename

经过稍加修改,可以用来打印重复行:

perl -n -e 'if ( /^\s*$/){print; next};if (exists($hash{$_})) { next } else { $hash{$_}=1; print }' filename

通过这个单行程序,迅速在几万条记录的文件中定位了几个出问题处方,重复发药的问题已经得到解决。

这个单行Perl程序十分精炼,感觉有必要记录下来。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21129783/viewspace-693273/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 测试nph-proxy.cgi
请登录后发表评论 登录
全部评论

注册时间:2016-08-15

  • 博文量
    111
  • 访问量
    113816