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

bash计算人的年龄并读取到csv文件?,bash,awk,Bash,Awk,我有一个csv文件,有三列,分别是姓名、邮政编码、年龄、年月日。我想计算每个条目的年龄,从今天的日期并输出到csv文件的第四列?我知道awk很方便,但我不知道如何读取和写入各个列的数据并创建一个新列! e、 g 我有以下的意见 `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",

我有一个csv文件,有三列,分别是姓名、邮政编码、年龄、年月日。我想计算每个条目的年龄,从今天的日期并输出到csv文件的第四列?我知道awk很方便,但我不知道如何读取和写入各个列的数据并创建一个新列! e、 g

我有以下的意见

`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日

我认为这个问题的核心部分是没有在末尾添加新的年龄字段。但是年龄的计算

试试这个:

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
检查可以轻松跳过标题。你可以自己动手


希望能有帮助

你还有其他作业要我们做吗?不过,说真的。。你试过什么?在发布这样的问题之前,请先阅读本网站的相关页面…+1这是一个好问题,尽管OP没有/可能没有投入足够的精力。dateDiff和用awk计算上限..有趣的话题这么多人发布了示例输入,而不是该输入的预期输出,这是怎么回事?有什么常见问题吗?@EdMorton我想问题中的代码块是输出的。应计算13(最后一个字段)并将其追加到每行。以及出生日期。在他的问题描述中,他犯了一个错误,“年龄”字段不应该在输入中。看来我是执行官^_^我想要的是将DOB与当前系统日期进行比较,并在最后一列中计算年龄。一种方法是使用历元时间,将两个输入转换成秒,然后再转换回来?但我可能仍然需要一个循环来读取列中的所有值并执行计算?我要找的是将DOB与当前系统日期和CalculateAnks进行比较我已经用我的CSV文件+1@Kent对其进行了测试非常接近正确我编辑了帖子谢谢!
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