免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2538 | 回复: 15
打印 上一主题 下一主题

awk问题 【会者为师,请赐教】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-11 19:13 |只看该作者 |倒序浏览
我有一个以十万记的文本,假设如下:
(dk.txt)
客户号码|客户名称|
420321198204010052|李华|
420320168432523522|成真|
421451151315146848|成龙|
222222222222222222|神龙有限公司|
222222222222222222|神龙汽车有限公司|
...   ....

需要实现:将同客户号码不同客户名称的字段导出到一个文本中。即将$1中内容相同,$2对应的行又不同的所有字段打印输出。

会者为师,请教各位前辈!用了awk2个多月,但是以涉及到像这样对同文件行与行之间的处理我还是束手无策!请大师指点迷津!

也请不要只说个看书就算答复,诚然,自学是根本,但是经验也是在一问一答中积累的。谢谢

论坛徽章:
0
2 [报告]
发表于 2006-04-11 20:34 |只看该作者
这个小问题了,但是单一条命令不能完成。
试试
#!/bin/bash
awk -F"|" '{print $1}' dk.txt|uniq -c|while read a b
do
if [ $a -ge 2 ]
then
grep $b dk.txt
fi
done

论坛徽章:
0
3 [报告]
发表于 2006-04-11 20:55 |只看该作者
谢谢,我去试试

论坛徽章:
0
4 [报告]
发表于 2006-04-11 21:15 |只看该作者
使我的思路开阔了,但是还是不能解决问题。比如上面同名称不同客户的 我想全部打印出来即:
222222222222222222|神龙有限公司|
222222222222222222|神龙汽车有限公司|

论坛徽章:
0
5 [报告]
发表于 2006-04-11 21:18 |只看该作者
原帖由 missme 于 2006-4-11 21:15 发表
使我的思路开阔了,但是还是不能解决问题。比如上面同名称不同客户的 我想全部打印出来即:
222222222222222222|神龙有限公司|
222222222222222222|神龙汽车有限公司|

说出你想要的结果吧,直观一点。

论坛徽章:
0
6 [报告]
发表于 2006-04-11 21:22 |只看该作者
上面的代码可以打印出来啊:
  1. 222222222222222222|神龙有限公司|
  2. 222222222222222222|神龙汽车有限公司|
复制代码

如果你有类似的,也照打无误,我测试过的。现在不明白你想要什么结果了。

论坛徽章:
0
7 [报告]
发表于 2006-04-11 21:42 |只看该作者
  1. awk -F"|" '{a[$1]++;b[$0]=$1}END{for(x in b){{print a[b[x]]>=2?x:""}}}' file
复制代码

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
8 [报告]
发表于 2006-04-11 21:49 |只看该作者
以下是解题的思路:

把 $1 提取出来 | 排序 | 用uniq 提取有重复的项
再用join 去取出最后结果

论坛徽章:
0
9 [报告]
发表于 2006-04-11 21:49 |只看该作者
原帖由 dbcat 于 2006-4-11 21:42 发表
  1. awk -F"|" '{a[$1]++;b[$0]=$1}END{for(x in b){{print a[b[x]]>=2?x:""}}}' file
复制代码

遇上awk高手了!
awk可以这么牛的?!

论坛徽章:
0
10 [报告]
发表于 2006-04-11 21:55 |只看该作者
dbcat你的awk有好几个空行~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP