免费注册 查看新帖 |

Chinaunix

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

这样的文件过滤效果如何实现??高手请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-16 15:18 |只看该作者 |倒序浏览
各位shell高手,本人不懂shell,遇到困难,请帮忙,要死了。

需求:
有两个文件,一个a.file格式如下:
abc.wav|1232123|123
bb.wav|3333|12
cc.wav|qerqwer|dd
yes.wav|3423|33
mdd.wav|ike|ee
另外一个b.file格式如下:
bb.wav
cc.wav
---------------
需要将b.file中有的音乐文件名称在a.file中有,就过滤出来,生成have.file文件,
没有的生成notHave.file 文件。

救命啊!!!

论坛徽章:
0
2 [报告]
发表于 2005-06-16 15:58 |只看该作者

这样的文件过滤效果如何实现??高手请进

fgrep -f b.file a.file

论坛徽章:
0
3 [报告]
发表于 2005-06-16 16:30 |只看该作者

这样的文件过滤效果如何实现??高手请进

其实这个问题很简单,坛上很多,改一下你试试:

cat a.file
abc.wav|1232123|123
bb.wav|3333|12
cc.wav|qerqwer|dd
yes.wav|3423|33
mdd.wav|ike|ee

cat b.file
bb.wav
cc.wav

程序如下:

nawk 'BEGIN { FS = "[| ]";  while ((getline < "b.file" > 0){ lines[$1] }}
{
    if($1 in lines)
        print > "have.file"
    else
        print > "nohave.file"
}' a.file

运行结果:

cat have.file
bb.wav|3333|12
cc.wav|qerqwer|dd

cat nohave.file
abc.wav|1232123|123
yes.wav|3423|33
mdd.wav|ike|ee

论坛徽章:
0
4 [报告]
发表于 2005-06-16 18:04 |只看该作者

这样的文件过滤效果如何实现??高手请进

楼上,写了一堆,不如 fgrep 省事

论坛徽章:
0
5 [报告]
发表于 2005-06-16 18:13 |只看该作者

这样的文件过滤效果如何实现??高手请进

楼上的,fgrep 省事是省事,它可以把它分成have.file和nothave.file吗?

论坛徽章:
0
6 [报告]
发表于 2005-06-16 22:19 |只看该作者

这样的文件过滤效果如何实现??高手请进

  1. fgrep -f b.file a.file > have.file
  2. fgrep -v -f b.file a.file > nothave.file
复制代码

不行吗?

论坛徽章:
0
7 [报告]
发表于 2005-06-17 08:24 |只看该作者

这样的文件过滤效果如何实现??高手请进

ZealeS,按你的方法,在unix下是通不过的,如果a.file是用空格作分隔符的是可以通过的,但用|作分隔符,不行。对fgrep我不懂,请教你在fgrep用什么参数可以用空格以外的作分隔符,谢谢。
你也可以搜搜rollingpig版主的回答,看看他如何说的。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2005-06-17 09:10 |只看该作者

这样的文件过滤效果如何实现??高手请进

grep处理的是字串,与分隔符有关么?

论坛徽章:
0
9 [报告]
发表于 2005-06-17 11:16 |只看该作者

这样的文件过滤效果如何实现??高手请进

各位大哥,我对grep并不很熟悉,只会简单的用用,但如上题的要求,应该是精确匹配,把上面的题改改,你用grep做做看看会出现什么:

cat a.file
abc.wav|1232123|123
bb.wav|3333|12
abb.wav|3333|12
cc.wav|qerqwer|dd
xcc.wav|qerqwer|dd
yes.wav|3423|33
mdd.wav|ike|ee

cat b.file
bb.wav
cc.wav

have.file
bb.wav
abb.wav
cc.wav
xcc.wav

难道bb.wav=abb.wav,cc.wav=xcc.wav吗?
其实rollingpig版主已经回答的很清楚了,你们可以搜搜他以前的贴子看看。

论坛徽章:
0
10 [报告]
发表于 2005-06-17 15:29 |只看该作者

这样的文件过滤效果如何实现??高手请进

谢谢,原来这里反映这么迅速的,好!!!!!!!

向您们学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP