Shell 获取文件中尺寸的最大值和最小值

Shell 获取文件中尺寸的最大值和最小值,shell,unix,sed,awk,Shell,Unix,Sed,Awk,我有一个文件的格式如下: 每包一行 该行以行李标签开始,标签为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 ... 我试图找出所有袋子中八个维度的最大值和最小值。也就是说,忽略标

我有一个文件的格式如下:

每包一行

该行以行李标签开始,标签为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 ...
我试图找出所有袋子中八个维度的最大值和最小值。也就是说,忽略标签和npx列,从第1、第9、第17、第25、第33、第41、。。。第2列、第10列、第18列、第26列、第34列、第42列。。。专栏等

每个包中有不同数量的点,但每个点始终有8个维度


我相信您可以使用一些Unix工具来完成这项工作,但我对这些工具了解不够,无法自信地完成这项工作。您如何获取这些信息?

这当然不可靠(例如,文件开头不能有任何空行),但应该让您开始:

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
awk'

NR==1{for(i=3;i)你对如何做这件事有何想法?这不是一项琐碎的任务,因此你应该付出一些努力。也许你可以将其分解为几个较小的任务,并询问其中的一个——例如,“如何将值读入数组?”或“如何循环数组的每8个元素?”请更具体地说,如果您显示预期的输出以及您的输入,这将有助于回答。