免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: volwang
打印 上一主题 下一主题

[文本处理] 匹配每行的第二列,只输出第一次匹配行 [复制链接]

论坛徽章:
2
2015年亚洲杯之巴勒斯坦
日期:2015-02-15 12:11:292015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2015-02-15 12:31 |只看该作者
回复 4# volwang


    量大有啥区别?这个解决很完美啊!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2015-02-16 18:27 |只看该作者
本帖最后由 volwang 于 2015-02-16 18:32 编辑

文本有20万行。
akw只处理一部分文本就退出。awk没有处理全部文本。

回复 11# yyt030


   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
13 [报告]
发表于 2015-02-16 18:48 |只看该作者
回复 12# volwang

1楼的数据和你的真实数据差距很大?
否则25W行好像可以处理啊。。。
   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2015-02-16 18:52 |只看该作者
稍微有点差距。20w行,8列。
awk处理一部分。
20w行中第二列中有不少重复的。需要输出第一个,后续相同的不输出。

回复 13# Herowinter


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2015-02-16 19:01 |只看该作者
你好。过节好。
awk我试过了,少量行可以处理,行20万就不行了。
如果我把这个文件命为log,用for循环遍历每一行第二列。
第一次出现的写到log2中,后续循环中,判断log2中是否含有相同字符,无则输出到log2。
不知道这样可行?
最后得到log2,则为输出。

回复 13# Herowinter


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2015-02-16 19:36 |只看该作者
原输入文件为log;输出文件为log2。

rm -rf log2
touch log2
for i in `cat log |awk '{print $2 }' `
do
aa=`cat log2 | grep $i `
if  [ ! -z "$aa" ] ; then
echo "have"
else
cat log |grep $i |head -1 >> log2
fi
done

这样可否

回复 13# Herowinter


   

论坛徽章:
0
17 [报告]
发表于 2015-02-17 11:09 |只看该作者
用python建立一个数组,然后try一下就好了
没有就输出,有就忽略


回复 1# volwang


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
18 [报告]
发表于 2015-02-17 15:18 |只看该作者
回复 14# volwang

Try this way if your awk can't work properly

$ perl -lane '{print if(!$h{$F[1]}++)}' FILE
qq sss.1  ww dd  rr  ee  tt yyy  
qq sss.2  ww dd  rr  ee  tt yyy
qq sss.3  ww dd  rr  ey  tt yyy
qq sss.x1  ww dr  ur  te  wt yyy

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
19 [报告]
发表于 2015-02-27 15:43 |只看该作者
先把第二列重复的字符串找出来
然后对每个这样的字符串找出其行号
如果能找出所有非第一次出现的行号
删去这些行即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP