我有一个格式如下的文件:
每个包都是一行。
该行以包的标签开头,为0或1。
然后有一个标签,以及包中的点数。
接下来是一个空格,然后为每个点提供该点的8个维度的每个值的列表。
例如,
label npx x11 x12 x13 x14 x15 x16 x17 x18 x21 x22 x23 x24 ...
label npy y11 y12 y13 y14 x15 x16 x17 x18 y21 y22 y23 y24 ...
我试图找到所有行李中八个维度中每个维度的最大值和最小值。也就是说,忽略label和npx列,来自第1,第9,第17,第25,第33,第41,......列的最大值和最小值,来自第2,第10,第18,第26,第34的最大值和最小值,42,......等等。
每个包中有不同数量的点,但每个点总是有8个维度。
我确信你可以用一些Unix工具做到这一点,但我对那些能够自信地做到这一点的人知之甚少。你如何获得这些信息?
答案 0 :(得分:1)
这当然不健壮(例如,文件开头不能有任何空白行),但应该让你开始:
awk '
NR==1{for(i=3;i<=10;i++) max[ i % 8 ] = min[ i % 8 ] = $i }
{
for(i=3; i<=NF;i++) {
if(max[ i % 8 ] < $i)
max[ i % 8 ]=$i
if(min[ i % 8 ] > $i)
min[ i % 8 ] = $i
}
}
END {
for(i=0;i<8;i++) printf "max in position %d: %d\n", i+1, max[(i+3)%8]
for(i=0;i<8;i++) printf "min in position %d: %d\n", i+1, min[(i+3)%8]
}' input-file