我有一个包含多行的文件,每行包含以下数据-
name 20150801|1 20150802|4 20150803|6 20150804|7 20150805|7 20150806|8 20150807|11532 20150808|12399 2015089|12619 20150810|12773 20150811|14182 20150812|27856 20150813|81789 20150814|41168 20150815|28982 20150816|24500 20150817|22534 20150818|3 20150819|4 20150820|47773 20150821|33168 20150822|53541 20150823|46371 20150824|34664 20150825|32249 20150826|29181 20150827|38550 20150828|28843 20150829|3 20150830|23543 20150831|6
name2 20150801|1 20150802|4 20150803|6 20150804|7 20150805|7 20150806|8 20150807|11532 20150808|12399 2015089|12619 20150810|12773 20150811|14182 20150812|27856 20150813|81789 20150814|41168 20150815|28982 20150816|24500 20150817|22534 20150818|3 20150819|4 20150820|47773 20150821|33168 20150822|53541 20150823|46371 20150824|34664 20150825|32249 20150826|29181 20150827|38550 20150828|28843 20150829|3 20150830|23543 20150831|6
竖线分隔值表示该月中每个日期的值。
每行具有相同的格式和相同的列数。
第一列名称表示该行的唯一名称,例如20150818 是 yyyyddmm
给定一个特定日期,如何提取当天具有最大值的行的名称?
我想你的意思是这样的:
awk -v date=20150823 '{for(f=2;f<=NF;f++){split($f,a,"|");if(a[1]==date&&a[2]>max){max=a[2];name=$1}}}END{print name,max}' YourFile
因此,您将要查找的日期作为名为的变量传递date
。然后,您迭代该行上的所有字段,并使用以下命令将每个字段的日期和值拆分为一个数组:|
作为分隔符 -a[1]
有日期,a[2]
有价值。如果日期匹配并且该值大于之前看到的任何最大值,则将其保存为新的最大值,并保存该行的第一个字段以便在最后打印。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)