在过去的考试试卷中,我有一个问题:
月份可以用不同的方式表示,例如数字
(1, 2, …, 12),或三字母月份名称 (Jan, Feb, …, Dec)。
建议如何使用 awk 中的关联数组来转换
三个字母的月份名称到月份数字,反之亦然,到
将月份数字翻译为三个字母的月份名称。
所以我想我会使用关联数组,其格式是月份的输入为 $1:
number_to_month["Jan"] = 1;
print number_to_month[$1]
但对我来说,这似乎并没有很好地利用关联数组的力量,而且我必须手动初始化数组中的每个月。
我还有哪些其他选择?
内置的split
函数是你的朋友,循环可以将 name-from-number 版本复制到 number-from-name 中:
BEGIN {
split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",month)
for (i in month) {
month_nums[month[i]]=i
}
}
END {
for (i in month) {
print i "\t" month[i]
}
for (m in month_nums) {
print m "\t" month_nums[m]
}
}
The BEGIN
块显示了如何做到这一点。然后END
块只是让你验证它。
我得到的输出(使用 gawk 4.0.1)是:
4 Apr
5 May
6 Jun
7 Jul
8 Aug
9 Sep
10 Oct
11 Nov
12 Dec
1 Jan
2 Feb
3 Mar
Feb 2
Sep 9
Jan 1
May 5
Apr 4
Oct 10
Dec 12
Nov 11
Jul 7
Mar 3
Aug 8
Jun 6
注意通常的尴尬(嘿!沃克沃德尼斯)由于无法强制数组上的访问顺序而产生for
loops.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)