Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3020612
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-06-23 13:09:40

文本:
12 15 87 74 00 45
34 48 97 28 83 27
34 69 17 45 20 65
11 29 68 47 36 50
34 48 97 28 83 27
34 69 17 45 20 65
11 29 68 47 36 50
27 48 78 37 16 68
 
要求输出每列的最大值:
34 69 97 74 83 68
 
  1. awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(j=1;j<=NF;j++){x=0;for(k=1;k<=NR;k++){x=a[k,j]>x?a[k,j]:x}printf x FS}print ""}' file

[解析]

  思路是利用二维数组来解题,首先按照行与列的二维坐标把该文本的每个元素都放入数组a中,最后用2个for循环来比较每列的每个元素的值,把最大的值赋给x,然后输出x,记着下一列的时候x清零。

阅读(5683) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

culhw2013-09-02 17:19:04

正在拜读版主的大作,获益良多呀.....


添加另外一种方法,希望会后来人有帮助

awk '{for(i=1;i<=NF;i++)a[i]>$i?a[i]:a[i]=$i;}END{for(j=1;j<=NF;j++)printf("%d ",a[j]);print ""}' file