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

分类:shell编程 阅读:86439 次

检查文件下第二列是否有重复,且有几行是重复的,并提取出重复的行的第二列
实际工作中是上百万行,列也比这多,这里只是列出一小部分而已,具体如下: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,大家回帖补充完善!