一组数据,如何两两得到差值??
一组数据
209 11 108 34
999 22 32 40
1 23 89 33 44
我要两两相减, 比如 第一排 11-209, 108-209,34-209,108-11,34-11,34-108, 都取绝对值。
然后竖排排列。
上面最终结果
198
101
175
97
23
74
其他两排同样处理。
awk 或者别的工具可以实现吗??
209 11 108 34
999 22 32 40
1 23 89 33 44
我要两两相减, 比如 第一排 11-209, 108-209,34-209,108-11,34-11,34-108, 都取绝对值。
然后竖排排列。
上面最终结果
198
101
175
97
23
74
其他两排同样处理。
awk 或者别的工具可以实现吗??
作者: vitas333_cu 发布时间: 2011-02-11
try:
复制代码
- #!/usr/bin/perl
- use warnings;
- use strict;
- while(<>){
- my @num=split;
- my ($i,$j);
- for($i=0;$i<$#num;$i++)
- {
- for($j=$i+1;$j<=$#num;$j++)
- {
- if(($num[$j]-$num[$i])>0)
- {
- print $num[$j]-$num[$i],"\n";
- } else {
- print $num[$i]-$num[$j],"\n";
- }
- }
- }
- }
作者: zzy7186 发布时间: 2011-02-12
回复 vitas333_cu
是这样的么?
复制代码
是这样的么?
- echo "209 11 108 34
- 999 22 32 40
- 1 23 89 33 44" |awk '{for(i=1;i<=NF;i++)for(j=i;j<=NF;j++)if(i!=j){print ($i-$j>0?$i-$j:$j-$i)}}'
- 198
- 101
- 175
- 97
- 23
- 74
- 977
- 967
- 959
- 10
- 18
- 8
- 22
- 88
- 32
- 43
- 66
- 10
- 21
- 56
- 45
- 11
作者: yinyuemi 发布时间: 2011-02-12