免费注册 查看新帖 |

Chinaunix

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

请教:用awk或者linux命令处理一个文本文档,在线等 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-19 09:17 |只看该作者 |倒序浏览
有一个名为test的文件:
1DRG        CAA        1          0.757        0.337        0.506
1DRG        CAB        2          0.768        0.487        0.534
1DRG        CAC        3          0.669        0.53        0.642
1DRG        CAD        4          0.68        0.68        0.67
1DRG        CAE        5          0.581        0.723        0.778
1DRG        CAF        6          0.592        0.873        0.805
1DRG        OAG        7          0.498        0.91        0.907
1DRG        HAA        8          0.504        1.008        0.924
我想把第一列变成2DRG,第二列不变,第三列都加8(加1后把得到的结果右对齐),第四列,第五列,第六列分别加0.01,请问如何用awk或者linux的命令实现?谢谢了。处理后的文件是:
2DRG        CAA         9          0.767        0.347        0.516
2DRG        CAB         10          0.778        0.497        0.544
2DRG        CAC         11          0.679        0.540        0.652
2DRG        CAD         12          0.690        0.690        0.680
2DRG        CAE         13          0.591        0.733        0.788
2DRG        CAF          14          0.602        0.883        0.815
2DRG        OAG         15          0.508        0.920        0.917
2DRG        HAA          16          0.514        1.018        0.934

[ 本帖最后由 parabola 于 2007-6-19 10:25 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-19 09:36 |只看该作者
  1. awk '{ $1="2DRG"; $3+=1; for (i=4; i <=6; i++) $i+=0.01; print; }' test
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2007-06-19 09:45 |只看该作者
  1. awk '{printf "2%s %s %2s %-5s %-5s %-5s\n",substr($1,2,3),$2,$3+8,$4+0.01,$5+0.01,$6+0.01}' test
复制代码

[ 本帖最后由 ly5066113 于 2007-6-19 09:46 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-06-19 10:07 |只看该作者
  1. awk '{$1+=1;$1=$1"DRG";$3+=8;$4+=0.01;$5+=0.01;$6+=0.01;printf "%s %s %2d %.3f %.3f %.3f\n",$1,$2,$3,$4,$5,$6}' test
复制代码


楼主第3列到底是加1还是加8?

[ 本帖最后由 dreammaker 于 2007-6-19 10:09 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-06-19 10:21 |只看该作者
不好意思,我弄错了。第三列是加8。谢谢各位高手。

论坛徽章:
0
6 [报告]
发表于 2007-06-19 10:45 |只看该作者
我分别用了 awk就是awp加ak和dreammaker的程序,基本成功了,只是多了一行
1DRG  8  0.010  0.010  0.010
我可以用vi打开文件然后再删除最后一行就好了。谢谢楼上的三位高手!

论坛徽章:
0
7 [报告]
发表于 2007-06-19 11:19 |只看该作者
awk 'BEGIN {FS="[ \t]+"}{$1="2DRG";for (i=3;i<=6;i++) $i=$i+0.01;printf("%s %s %2d %.3f %.3f %.3f\n",$1,$2,$3,$4,$5,$6)}'

论坛徽章:
0
8 [报告]
发表于 2007-06-19 12:18 |只看该作者
如果想写成脚本文件copy.awk,然后这样调用awk copy.awk test,这个copy.awk应该怎样写?我写了好几次都不行,好像总是格式不对。

论坛徽章:
0
9 [报告]
发表于 2007-06-19 13:55 |只看该作者
调用时候~
  1. awk -f copy.awk test
复制代码

论坛徽章:
0
10 [报告]
发表于 2007-06-20 10:58 |只看该作者

回复 1楼 parabola 的帖子

[root@aa test]# cat dl.txt
1DRG        CAA        1          0.757        0.337        0.506
1DRG        CAB        2          0.768        0.487        0.534
1DRG        CAC        3          0.669        0.53        0.642
1DRG        CAD        4          0.68        0.68        0.67
1DRG        CAE        5          0.581        0.723        0.778
1DRG        CAF        6          0.592        0.873        0.805
1DRG        OAG        7          0.498        0.91        0.907
1DRG        HAA        8          0.504        1.008        0.924
[root@aa test]# awk '$1="2DRG";$2="zhd"; {print $0}' dl.txt
2DRG CAA 1 0.757 0.337 0.506
2DRG zhd 1 0.757 0.337 0.506
2DRG zhd 1 0.757 0.337 0.506
2DRG CAB 2 0.768 0.487 0.534
2DRG zhd 2 0.768 0.487 0.534
2DRG zhd 2 0.768 0.487 0.534
2DRG CAC 3 0.669 0.53 0.642
2DRG zhd 3 0.669 0.53 0.642
2DRG zhd 3 0.669 0.53 0.642
2DRG CAD 4 0.68 0.68 0.67
2DRG zhd 4 0.68 0.68 0.67
2DRG zhd 4 0.68 0.68 0.67
2DRG CAE 5 0.581 0.723 0.778
2DRG zhd 5 0.581 0.723 0.778
2DRG zhd 5 0.581 0.723 0.778
2DRG CAF 6 0.592 0.873 0.805
2DRG zhd 6 0.592 0.873 0.805
2DRG zhd 6 0.592 0.873 0.805
2DRG OAG 7 0.498 0.91 0.907
2DRG zhd 7 0.498 0.91 0.907
2DRG zhd 7 0.498 0.91 0.907
2DRG HAA 8 0.504 1.008 0.924
2DRG zhd 8 0.504 1.008 0.924
2DRG zhd 8 0.504 1.008 0.924
[root@aa test]# awk '{$1="2DRG";$2="zhd"; print $0}' dl.txt
2DRG zhd 1 0.757 0.337 0.506
2DRG zhd 2 0.768 0.487 0.534
2DRG zhd 3 0.669 0.53 0.642
2DRG zhd 4 0.68 0.68 0.67
2DRG zhd 5 0.581 0.723 0.778
2DRG zhd 6 0.592 0.873 0.805
2DRG zhd 7 0.498 0.91 0.907
2DRG zhd 8 0.504 1.008 0.924


我也做了个实验.
上面的2条命令就是大括号的范围不同,为什么有这种输出呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP