免费注册 查看新帖 |

Chinaunix

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

如何复制/增加域 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-19 15:05 |只看该作者 |正序浏览
我需要写个shell,把下面group文件中的用户b所在组改为和用户a一样
比如:
原文件
PM:a,c,b
RD:c,a
ww:b,e
RR:b
EE:e,f

输出为
PM:a,c,b
RD:c,a,b
ww:e
RR:
EE:e,f

请高手帮忙,谢谢

论坛徽章:
0
19 [报告]
发表于 2011-04-21 09:57 |只看该作者
回复 18# yinyuemi


    就是这个意思,厉害,学习学习

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
18 [报告]
发表于 2011-04-20 12:19 |只看该作者
回复 17# shawk3


    这个意思么?
  1. awk -v FS='[,:]' -v var1=a -v var2=b '{
  2.         p=0
  3.         printf $1":"
  4.         {for(i=2;i<=NF;i++) {
  5.                 if($i==var2){printf ""}
  6.                 else {
  7.                         if ($i==var1){printf i==2?$i:","$i;p=1}
  8.                         else {printf i==2?$i:","$i}
  9.                         }
  10.         };printf p?","var2"\n":"\n"}
  11. }'
复制代码

论坛徽章:
0
17 [报告]
发表于 2011-04-20 10:05 |只看该作者
回复 16# yinyuemi


    感谢各位高手帮忙,
探讨一下前面 2# yinyuemi 的思路, 能否把a,b赋给2个变量,然后遍历NF>1的每个域后和2个变量比较
$i=a and $i=b 不动
$i=a and $i !=b 添加b
$i !=a and $i=b 删除b
$i !=a and $i !=b 不动
这样的好处是减少了写文件的次数,感觉更严谨点
可能要用到数组,不知能否实现?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
16 [报告]
发表于 2011-04-19 23:50 |只看该作者
本帖最后由 yinyuemi 于 2011-04-20 02:54 编辑

回复 6# shawk3


    看来你的问题已经解决了,
借鉴jason680兄的想法,改进了下awk:
  1. echo "PM:a,ac,b
  2. b:
  3. a:
  4. RD:ac,a
  5. ww:e,a,cb.b
  6. RR:bb,b
  7. EE:e,f" |awk -v FS='[,:]' '{
  8.         p=0
  9.         printf $1":"
  10.         {for(i=2;i<=NF;i++) {
  11.                 if($i=="b"){printf ""}
  12.                 else {
  13.                         if ($i=="a"){printf i==2?$i:","$i;p=1}
  14.                         else {printf i==2?$i:","$i}
  15.                         }
  16.         };printf p?",b\n":"\n"}
  17. }'
  18. PM:a,ac,b
  19. b:
  20. a:
  21. RD:ac,a,b
  22. ww:e,a,cb.b,b
  23. RR:bb
  24. EE:e,f
复制代码

论坛徽章:
0
15 [报告]
发表于 2011-04-19 21:03 |只看该作者
本帖最后由 shawk3 于 2011-04-19 21:20 编辑

回复 14# shawk3


    刚恶补了一下,自己解答一下,大概是这样,同时回写到原文件
$echo "M:a,ac,b
b:
a:
RD:ac,a
ww:e,a,cb.b
RR:b
EE:e,f" > group

$a="a"
$b="b"
$c="./group"
$perl -i.bak -lape  '{s/(,)'"$b"'(,|$)/$1/;s/,$//;if(m/(,)'"$a"'(,|$)/){$_.=",'"$b"'"}}'  "$c"

PM:a,ac,b
b:
a:
RD:ac,a,b
ww:e,a,cb.b,b
RR:
EE:e,f

论坛徽章:
0
14 [报告]
发表于 2011-04-19 20:44 |只看该作者
回复 12# jason680


    我不懂perl,怎么把a,b用变量替代呢?多谢
比如
perl -lape ..... /etc/group

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
13 [报告]
发表于 2011-04-19 19:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
12 [报告]
发表于 2011-04-19 17:45 |只看该作者
回复  where27


    多谢,多谢
还有点问题
有的用户名字叫 bc.b,或者 :前的组名包含a或b,这时\就 ...
shawk3 发表于 2011-04-19 17:26



$ echo 'PM:a,ac,b
bb:
a:
RD:ac,a
ww:e,cb.b
RR:b
EE:e,f' | perl -lape '{s/(,)b(,|$)/$1/;s/,$//;if(m/(,)a(,|$)/){$_.=",b"}}'
PM:a,ac,b
bb:
a:
RD:ac,a,b
ww:e,cb.b
RR:
EE:e,f

论坛徽章:
0
11 [报告]
发表于 2011-04-19 17:26 |只看该作者
本帖最后由 shawk3 于 2011-04-19 17:38 编辑

回复 10# where27


    多谢,多谢
还有点问题
有的用户名字叫 bc.b,或者 :前的组名包含a或b,这时\<b\>就又不行了,该加啥限定呢?
比如
PM:a,ac,b
bb:
a:
RD:ac,a
ww:e,cb.b
RR:b
EE:e,f
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP