免费注册 查看新帖 |

Chinaunix

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

请问,如何将文件A中包含文件B的内容,调整到文件A的最前端? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-03 09:26 |只看该作者 |倒序浏览
文件名:file1.sql
文件内容:
sp_addproc
sp_modproc
sp_delproc

文件名:file2.sql
文件内容:
exec sp_adduser
exec sp_moduser
exec sp_deluser
exec sp_addgroup
exec sp_modgroup
exec sp_delgroup
exec sp_addgroupmember
exec sp_modgroupmember
exec sp_delgroupmember
exec sp_addproc                    --文件file1.sql包含的内容
exec sp_modproc                   --文件file1.sql包含的内容
exec sp_delproc                     --文件file1.sql包含的内容

现在想要将文件file1.sql里面所包含的存储过程名字排放在文件file2.sql的最前端,即:
文件名:file3.sql
文件内容:
exec sp_addproc       --已被调整到前面
exec sp_modproc      --已被调整到前面
exec sp_delproc        --已被调整到前面
exec sp_adduser
exec sp_moduser
exec sp_deluser
exec sp_addgroup
exec sp_modgroup
exec sp_delgroup
exec sp_addgroupmember
exec sp_modgroupmember
exec sp_delgroupmember

[ 本帖最后由 jyl980431 于 2008-12-3 09:28 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-03 09:40 |只看该作者
awk 'NR==FNR{a[$2]++;b[$2]=$1}NR>FNR&&a[$0]{print "exec "$0}END{for( i in a ) print b[ i ]" "i}' file2.sql file1.sql

[ 本帖最后由 smallstar001 于 2008-12-3 09:49 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-12-03 09:43 |只看该作者
原帖由 smallstar001 于 2008-12-3 09:40 发表
awk 'NR==FNR{a[$2]++;b[$2]=$1}NR>FNR&&a[$0]{print "exec "$0}END{for( i in a ) print b[$2]" "$i}' file2.sql file1.sql

结果好像不太对,运行上述命令后,结果如下:
exec sp_addproc
exec sp_modproc
exec sp_delproc
exec
exec
exec
exec
exec
exec
exec
exec
exec
exec
exec
exec
exec
exec

论坛徽章:
0
4 [报告]
发表于 2008-12-03 09:47 |只看该作者
哦  i前面不用$

不过有个缺点就是会把file2里面重复得记录给冲掉了,保证你file2里没有重复了

我再想想

[ 本帖最后由 smallstar001 于 2008-12-3 09:50 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2008-12-03 09:50 |只看该作者
try:
  1. (grep -Ff file1.sql file2.sql;grep -Fvf file1.sql file2.sql)
复制代码

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [报告]
发表于 2008-12-03 09:52 |只看该作者
file2.sql的要保持原顺序
  1. awk 'NR==FNR{a[$2]=$0;b[NR]=$2}NR>FNR&&($0 in a){print "exec "$0;delete a[$0]}END{for(i=1;i<=length(b);i++) if(i in b && b[i] in a) print a[b[i]]}' file2.sql file1.sql
复制代码

论坛徽章:
0
7 [报告]
发表于 2008-12-03 09:59 |只看该作者
原帖由 blackold 于 2008-12-3 09:50 发表
trygrep -Ff file1.sql file2.sql;grep -Fvf file1.sql file2.sql)

强!OK了!
语句有几个参数看不大明白,一会儿去学习一下,谢谢了!

论坛徽章:
0
8 [报告]
发表于 2008-12-03 10:01 |只看该作者
原帖由 ynchnluiti 于 2008-12-3 09:52 发表
file2.sql的要保持原顺序
awk 'NR==FNR{a[$2]=$0;b[NR]=$2}NR>FNR&&($0 in a){print "exec "$0;delete a[$0]}END{for(i=1;i

执行结果如下:
exec sp_addproc
exec sp_modproc
exec sp_delproc
exec
awk: cmd. line:1: (FILENAME=file1.sql FNR=4) fatal: attempt to use array `b' in a scalar context
谢谢楼上的各位了,问题已经解决了!

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2008-12-03 10:23 |只看该作者
原帖由 jyl980431 于 2008-12-3 10:01 发表

执行结果如下:
exec sp_addproc
exec sp_modproc
exec sp_delproc
exec
awk: cmd. line:1: (FILENAME=file1.sql FNR=4) fatal: attempt to use array `b' in a scalar context
谢谢楼上的各位了,问题 ...

解决就好。我这试的可以。

论坛徽章:
0
10 [报告]
发表于 2008-12-03 10:28 |只看该作者
原帖由 blackold 于 2008-12-3 09:50 发表
trygrep -Ff file1.sql file2.sql;grep -Fvf file1.sql file2.sql)

刚才在网上查了一下grep -F相当于Fgrep,只是处理正则表达式和普通字符串的区别,对于本贴问题来说,除了速度基本上是一样的,都是处理字符串
那么为什么
grep -Ff file1.sql file2.sql;grep -Fvf file1.sql file2.sql结果是正确的,
而grep -f file1.sql file2.sql;grep -vf file1.sql file2.sql却不正确呢?
附grep -f file1.sql file2.sql;grep -vf file1.sql file2.sql执行结果
exec sp_adduser
exec sp_moduser
exec sp_deluser
exec sp_addgroup
exec sp_modgroup
exec sp_delgroup
exec sp_addgroupmember
exec sp_modgroupmember
exec sp_delgroupmember
exec sp_addproc
exec sp_modproc
exec sp_delproc
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP