# !/usr/bin/env bash
for year in all/*
do
echo -ne `basename $year .gz`"\t"
gunzip -c $year | \
awk '{ temp = substr($0, 88, 5) + 0;
quality = substr($0, 93, 1);
if (temp !=9999 && quality ~ /[01459]/ && temp > max) max = temp }
END { print max }'
done
我在hadoop的第四版的明确指南下面练习。我已经做了第一个练习,它是有效的,但我不明白质量的含义~/[01459]/。
3条答案
按热度按时间kg7wmglp1#
这是一个正则表达式匹配,使用括号表达式。
如果质量与这些字符中的任何一个匹配,则为真。
vdgimpew2#
这称为字符列表。它匹配方括号中的任何一个字符。例如:
[014]
匹配字符串中的任何字符“0”、“1”或“4”。主要来自:http://www.math.utah.edu/docs/info/gawk_5.html
cl25kdpy3#
根据http://www.math.utah.edu/docs/info/gawk_5.html
exp~/regexp/
如果表达式exp(作为字符串)与regexp匹配,则为真。
和
[...]
这称为字符列表。它匹配方括号中的任何一个字符。
因此
quality ~ /[01459]/
是true
如果quality
包含任何1
,4
,5
,9