-1

名前、郵便番号、年齢dd / mm/yyを読み取る3つの列を持つcsvファイルがあります。今日の日付から各エントリの経過時間を計算して、csvファイルの4番目の列に出力したいですか?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 に答える