我有一个包含三列的csv文件,其中包含名称,邮政编码,年龄dd / mm / yy。我想计算从今天开始的每个条目的年龄,并输出到csv文件的第四列?我知道awk很方便,但我不知道从各个列读取和写入数据并创建一个新的! e.g
name,postcode,dob,age
Dave,ws245f,09/12/2000,13
我有以下输入
`cat estimateAge.csv|awk -F'/|,' '{b=mktime($5" "$4" "$3" 00 00 00 00");a (systime()-b)/(365*24*60*60);a=a==int(a)?a:int(a)+1;print $0","a}`'
这是输出
Joe Bloggs,0121 545465650,01/03/1982,31
输出应为
Joe Bloggs,0121 545465650,01/03/1982,30
请注意,年龄计算不正确,因为Joe Bloggs在3月之前还不到31岁
答案 0 :(得分:2)
我认为这个问题的核心部分并不是将新的年龄字段添加到最后。但年龄计算。
试试这个:
awk -F'/|,' '{b=mktime($5" "$4" "$3" 00 00 00 00");a=(systime()-b)/(365*24*60*60);a=a==int(a)?a:int(a)+1;print $0","a}' file
好吧也许我不应该把它们放在一行:
awk -F'/|,' '{b=mktime($5" "$4" "$3" 00 00 00 00");
a=(systime()-b)/(365*24*60*60);
a=a==int(a)?a:int(a)+1;print $0","a}' file
使用您的示例数据进行测试:
kent$ echo "Dave,ws245f,09/12/2000"|awk -F'/|,' '{b=mktime($5" "$4" "$3" 00 00 00 00");a=(systime()-b)/(365*24*60*60);a=a==int(a)?a:int(a)+1;print $0","a}'
Dave,ws245f,09/12/2000,13
正如您所看到的,我没有检查标题行,NR>1
检查可以轻松跳过标题。你可以DIY。
希望有所帮助