免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助:文本刷选打印 [复制链接]

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-29 11:54 |只看该作者 |倒序浏览
有两个文件,一个是list.txt, 内容如下:
rs
rf
pc
tx
sg

另一个文件是 ref.txt,内容如下:
set data_0 " \
    unix/user/rs.dat \
    unix/user/lo.dat \
    unix/user/rf.dat \
    unix/user/km.dat \
    unix/user/tx.dat \
    unix/user/gf.dat \
    unix/user/sg.dat \
    unix/user/pc.dat \
    "

set lib_0  " \
    unix/user/rs.lib \
    unix/user/lo.lib \
    unix/user/rf.lib \
    unix/user/km.lib \
    unix/user/tx.lib \
    unix/user/gf.lib \
    unix/user/sg.lib \
    unix/user/pc.lib \
"
我希望只打印ref.txt 文件中只有list.txt 列出来的元素,期望最终打印结果如下:
set data_0 " \
    unix/user/rs.dat \
    unix/user/rf.dat \
    unix/user/tx.dat \
    unix/user/sg.dat \
    unix/user/pc.dat \
    "

set lib_0  " \
    unix/user/rs.lib \
    unix/user/rf.lib \
    unix/user/tx.lib \
    unix/user/sg.lib \
    unix/user/pc.lib \
"
请教大家,怎么用awk or sed 实现????不胜感激!

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
2 [报告]
发表于 2015-12-29 12:33 |只看该作者
  1. awk -F '[./]' 'FNR==NR{a[$0]=1;next}{if(a[$(NF-1)]) {print $0} if(/"/) print $0}' list.txt  ref.txt
复制代码
回复 1# 南武水寿


   

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
3 [报告]
发表于 2015-12-29 13:20 |只看该作者
灰常感谢!
尝试了一下, 需要去掉ref.txt文件中的空白行才能正确执行,不然会报error,如下
awk: (FILENAME=13 FNR=11) fatal: attempt to access field -1,  不然只能打第一段。回复 2# zxy877298415


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-24 06:20:00
4 [报告]
发表于 2015-12-30 12:27 |只看该作者
awk  'NR==FNR{t="\"";a[$1];next}$0~t;{for (i in a) if ($0 ~ i)print $0}'

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
5 [报告]
发表于 2015-12-30 14:24 |只看该作者
这个方法好赞!还能解决一些复杂的匹配情况、
谢谢分享!回复 4# bb659030105


   

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
6 [报告]
发表于 2015-12-30 14:31 |只看该作者
请教一下: $0~t;  这一句是怎么实现双引号被print出来的(其中的原理)。。。。。。。个人觉得这句好强大呀
回复 4# bb659030105


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-24 06:20:00
7 [报告]
发表于 2015-12-31 09:04 |只看该作者
回复 6# 南武水寿

因为我的t变量是存着双引号 " , 所以当我判断每行是否匹配到双引号就能实现打印首尾两行了
   

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
8 [报告]
发表于 2015-12-31 13:11 |只看该作者
$ grep -Ff list.txt ref.txt
    unix/user/rs.dat \
    unix/user/rf.dat \
    unix/user/tx.dat \
    unix/user/sg.dat \
    unix/user/pc.dat \
    unix/user/rs.lib \
    unix/user/rf.lib \
    unix/user/tx.lib \
    unix/user/sg.lib \
    unix/user/pc.lib \

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
9 [报告]
发表于 2015-12-31 13:12 |只看该作者
$ grep -Ff list.txt ref.txt
    unix/user/rs.dat \
    unix/user/rf.dat \
    unix/user/tx.dat \
    unix/user/sg.dat \
    unix/user/pc.dat \
    unix/user/rs.lib \
    unix/user/rf.lib \
    unix/user/tx.lib \
    unix/user/sg.lib \
    unix/user/pc.lib \

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
10 [报告]
发表于 2016-01-05 16:29 |只看该作者
Got it ! 回复 7# bb659030105


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP