bash计算人的年龄并读取到csv文件?

时间:2013-01-15 23:28:08

标签: bash awk

我有一个包含三列的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岁

1 个答案:

答案 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。

希望有所帮助