Shell实战:检查是否有重复,并提取重复内容,shell实战


检查文件下第二列是否有重复,且有几行是重复的,并提取出重复的行的第二列


实际工作中是上百万行,列也比这多,这里只是列出一小部分而已,具体如下:cnyunwei.log


0920762613004 367707175433 0635


0921702423002 508705309115 1035


0922450613006 328209142523 5063


0927310523001 518207014922 1035


0920910523002 538510242124 6035


0920910613004 538311101228 1035


0921980613015 327806305726 1635


0922262313001 458706080015 1033


0920012313004 518306272410 9065


0926470213015 518207014922 5635


0925112313002 138512110026 1035


0928030613003 128601150031 1357


0927340123001 538311101228 1035


0926471413002 518803249270 8065


0926550523002 448706043468 1035


200908565489 148705080622 2083


200910633424 427703083341 1183


709101202008 138512110026 1035


0933001263450 337904124727 4258


709108057002 13801126122X 1335


709200077043 338905250343 1035


0933001251479 138512110026 5258


709213077016 338912128329 1035


709213072032 338612152326 1335


709213072002 338705158523 1935


709214077003 339001015682 1035


==>> 以下两种方法可以达到同样的效果


awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c | grep -v "1 "


awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c | awk '{if($1>1){print $0}}'


执行后的结果:


2 538311101228


2 518207014922


3 138512110026


注:


awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c


==>> 意思是提取出第二列并过滤重复,且列出重复行数


扩展一下,把以上结果所在行整行内容取出==>> 把上面取出的结果临时存于temp.log文件中,再读取这个文件来取原文件里的整行内容


awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c | grep -v "1 " | awk '{print $2}' >> temp.log



awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c | awk '{if($1>1){print $0}}' | awk '{print $2}' >> temp.log


==>>


vi cnyunwei.sh


#!/bin/sh


SOCFILENAME=cnyunwei.log


FILENAME=temp.log


if [ -e $FILENAME ]; then


rm -rf $FILENAME


fi


awk -F " " '{print $2}' $SOCFILENAME | sort -r | uniq -c | grep -v "1 " | awk '{print $2}' >> $FILENAME


while read LINE


do


grep $LINE $SOCFILENAME


done < $FILENAME


exit 0


更简单的方法合并成一行命令搞定:


awk -F " " '{print $2}' cnyunwei.log | sort -r | uniq -c | awk '{if($1>1){print $0}}' | awk '{print $2}' | while read output;do grep $output cnyunwei.log; done


都是工作中的实战Shell,大家回帖补充完善!


相关内容

    暂无相关文章