展会信息港展会大全

Shell实战:检查是否有重复,并提取重复内容
来源:互联网   发布日期:2015-08-20 20:56:15   浏览:1363次  

导读: 检查文件下第二列是否有重复,且有几行是重复的,并提取出重复的行的第二列 实际工作中是上百万行,列也比这多,这里只是列出一小部分而已,具体如下:cnyunwei.log 0920762613004 367707175433 0635 0921702423002 508705309115 1035 0922450613006 3282091...

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

实际工作中是上百万行,列也比这多,这里只是列出一小部分而已,具体如下: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,大家回帖补充完善!

赞助本站

人工智能实验室

相关热词: Shell 实战 检查 是否 重复

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港