【问题标题】:How to awk number into ranges and print the lower如何将数字awk到范围并打印较低的
【发布时间】:2014-07-10 00:11:03
【问题描述】:

那里的任何人都可以帮助我了解如何利用 awk 将一组值分组到范围中并打印每个范围的最低值作为输出。

示例文件包含

2
3
4
6
7
8
10
12
13
14
16
18
19

从最小值开始,我想将它们分组为 >=4 的区间并打印出最小值

组应该是

f1rst group
2
3
4
6

second group
7
8
10

third group
12
13
14

fourth group
16
18
19

输出应该是每组的最小值

2
7
12
16

或打印出每组的最大值

6
10
14
19

【问题讨论】:

  • 数字分组的逻辑是什么?
  • 您的组似乎有 4 或 3 个成员,没有明确的逻辑来决定哪个有 4 个,哪个有 3 个。我认为这是“1 到 4 之间、5 到 8 之间的值等”但第一组在 2 到 6 之间……(我也想“好吧,他想要 N 到 N+4 之间”,但后来 N+4 包括在内?所以真的是 5 人一组?例如:1 2 3 4 5 是一组?)

标签: awk intervals


【解决方案1】:

使用awk将其按4分组

最小

awk 'NR%4==1' file
2
7
13
19

最大

awk 'NR%4==0' file
6
12
18

获取最小值和最大值。

awk 'ORS=NR%4?FS:RS' file | awk '{for (i=1;i<=NF;i++) {min=$i<min||!min?$i:min; max=$i>max||!max?$i:max} print min,max;min=max=0}'
2 6
7 12
13 18
19 19

第一个awk分组数据,第二个得到maxmin

【讨论】:

  • 这只是每 4 行打印一次(从第一个示例中的第 1 行开始,在第二个示例中的第“0”行(因此第 4 行)...它与分组或打印无关最小值(除非输入已排序),并且不会根据输入的值分组(它基于行号而不是行的值打印)
猜你喜欢
  • 2017-12-23
  • 1970-01-01
  • 2020-05-25
  • 2020-02-29
  • 2017-03-19
  • 1970-01-01
  • 2021-11-26
  • 2021-01-24
相关资源
最近更新 更多