【问题标题】:Use awk to get min-max column values使用 awk 获取最小-最大列值
【发布时间】:2015-02-25 12:23:26
【问题描述】:

给定一个包含数据的文件,例如

2015-12-24 22:02 12   9.87 feet  High Tide
2015-12-25 03:33 12  -0.38 feet  Low Tide
2015-12-25 06:11 12   Full Moon
2015-12-25 10:16 12  11.01 feet  High Tide
2015-12-25 16:09 12  -1.29 feet  Low Tide

awk 命令将返回第 4 列中的最小值:

awk 'min=="" || $4 < min {min=$4} END{ print min}' FS="  " 12--December.txt

如何让它排除 $4 包含文本的任何行?我想这需要正则表达式,但仔细研究正则表达式手册,我不知道该怎么做。

【问题讨论】:

  • poring over regex manuals 你找不到如何只匹配数字?我在谷歌搜索了awk regex,第一个结果清楚地说明了如何做到这一点。

标签: awk


【解决方案1】:

您可以在第四个字段上使用正则表达式比较

$4~/[0-9]+/

测试

$ awk '$4~/[0-9]+/ && $4 < min {min=$4} END{print min}' input
-1.29

注意 这是代码的最小化版本。您可以像在测试代码中一样安全地跳过示例代码中的一些语句

【讨论】:

  • 要排除是否有文本,最好使用$4~/^[^[:alpha:]]+$/
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2015-06-29
  • 2021-09-17
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
相关资源
最近更新 更多