-1

我有一个 csv 文件,其中包含三列读取名称、邮政编码、年龄 dd/mm/yy。我想从今天的日期计算每个条目的年龄并输出到 csv 文件的第四列?我知道 awk 很方便,但我不知道从各个列读取和写入数据并创建一个新的!例如

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 岁

4

1 回答 1

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。

希望能帮助到你

于 2013-01-15T23:57:54.333 回答