用Perl搜索重复的行

在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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21129783/viewspace-693273/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值