免费注册 查看新帖 |

Chinaunix

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

awk中如何改变一个域的值,并把它写回文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-07 21:14 |只看该作者 |倒序浏览
比如用awk处理一个文件a:
1:2:3:4:5
1:2:3:4:mm
1:2:3:4:5

我想把含有mm那一行的第一域改成abc,并写入文件
如果用
awk '$5~xx {$1="abc";print $0}' a
则只能打印出第二行,无法把它写回文件a,并替换掉原来的第二行.
如何可以把修改后的数据写回文件a呢?

论坛徽章:
0
2 [报告]
发表于 2003-06-07 23:07 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

...

  1. awk  -F':' 'BEGIN{OFS=":"} {
  2.   if ( $5 ~ "mm" ) { $1 = "abc" }
  3.   print $0
  4. }' a >  b
  5. mv b a
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-06-07 23:12 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

这样作SCO UNIX)
  1. awk -F":"  'BEGIN{OFS=":"}{if($5=="mm"){$1="abc"};print $0}' filename
  2. 结果
  3. 1:2:3:4:5
  4. abc:2:3:4:mm
  5. 1:2:3:4:5
复制代码
   
红侠出手好快噢!

论坛徽章:
0
4 [报告]
发表于 2003-06-07 23:35 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

[quote]原帖由 "admirer"] 红侠出手好快噢![/quote 发表:


呵呵。。。

不过今天好象网速不稳定,还有时候连不上。。。

论坛徽章:
0
5 [报告]
发表于 2003-06-08 10:51 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

[quote]原帖由 "红袖添香"][/quote 发表:
     
awk -F":"是不是和BEGIN里的OFS=":"重复了呢~~~

论坛徽章:
0
6 [报告]
发表于 2003-06-08 19:02 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

原帖由 "anonimousboy" 发表:
   
awk -F":"是不是和BEGIN里的OFS=":"重复了呢~~~
   

不重复。

如果没有 -F":" ,将会使用默认的 空白作为输入分隔符,
如果没有OFS=":" 用 print $0 时,输出中也会使用默认的空白作为输入分隔符,就没有 : 了

论坛徽章:
0
7 [报告]
发表于 2003-06-09 07:50 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

原帖由 "红袖添香" 发表:
   

不重复。

如果没有 -F":" ,将会使用默认的 空白作为输入分隔符,
如果没有OFS=":" 用 print $0 时,输出中也会使用默认的空白作为输入分隔符,就没有 : 了
  
哈哈,红袖姐,不好意思,我看错了,我把"FS"当成"OFS"了,不好意思~~~(本来在鸡蛋里找个骨头了)

论坛徽章:
0
8 [报告]
发表于 2003-06-09 09:39 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

楼主,头像是你的照片么,家里没灯用么,还用原始社会的火光照明么

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

awk中如何改变一个域的值,并把它写回文件?

[quote]原帖由 "红袖添香"][/quote 发表:
     
awk  -F':' 'BEGIN{OFS=":"} {
  if ( $5 ~ "mm" ) { $1 = "abc" }
  print $0
}' a >  b
mv b a

我觉得这种方法好土,难道awk不提供方式直接写回文件,而必须先写到别的文件,再用mv吗?这样在多线程的情况下,多个线程都进行mv操作时容易出问题。请问各位大侠,是否可以直接写回文件。(shell是否提供修改文件值,直接写好文件的功能?
如果awk的确没有此功能,是否可以用其他命令实现此功能。)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-06-16 21:50 |只看该作者

awk中如何改变一个域的值,并把它写回文件?

awk、sed、grep...等等都是unix提供给用户进行流组装的工具,很多情况下他们是夹在管道中执行的,所以,他们都不会直接修改原文件的!如果让他们直接修改原文件的话,反倒用起来很不方便了,我们也就无法或很难实现单行命令式的组合命令了。
不过我到觉得这样挺好,免得因代码失误造成不必要的损失。个人看法和感受,仅供参考!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP