使用awk获取最小-最大列值

使用awk获取最小-最大列值,awk,Awk,给定一个包含以下数据的文件: 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=="" |

给定一个包含以下数据的文件:

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
awk'min==”||$4

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

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

$4~/[0-9]+/

测试

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

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

仔细阅读regex手册
,您找不到如何只匹配数字?我在谷歌搜索了
awk regex
,第一个结果清楚地解释了如何做。要排除是否有文本,最好使用
$4~/^[^[:alpha:]+$/