awk -F"," '{OFS=","; $1=system("date -d "$1" +%d-%m-%Y") ; print $0}' data.csv | head
私はcsvファイルの最初の列を取り、日付形式を%dd-%mm-%yyyyに標準化しようとしています。
上記のコードを試してみると、日付:書き込みエラー:パイプが壊れています。
しかし、以下のコードを試してみると:
dd=$(csvcut -c 1 -e ISO-8859-1 -d "," data.csv | head -2 | sed -n 2p)
echo $dd
echo $(date -d $dd "+%d-%m-%Y")
出力を取得します:
2017-02-03
2017年3月2日
私は何が間違っているのですか。ヒントはありますか?ありがとう。
私のシステム:Ubuntu 16.04.1 LTS
編集2:サンプルファイルは次のとおりです: http://grn.dk/sites/default/files/attachments/data.csv
編集:
確実なCSVデータファイル(入力):data.csv(多数の行を含む)
Bogført,Tekst,Beløb,Saldo
2017-02-03, random text,-425,-611524.54
出力:
Bogført,Tekst,Beløb,Saldo
03-02-2017, random text,-425,-611524.54
ただし、日付の形式は他の形式でもかまいません。現在、csvインポートジョブの日付の標準化を検討しています。ありがとう。
bash-4.1$ cat a.txt
2017-02-03, random text,-425,-611524.54
2017-02-08, random text,-425,-611524.54
2017-02-07, random text,-425,-611524.54
bash-4.1$ awk -F, '{a="date -d "$1" +%Y%m%d"; while (a |getline line){$1=line;}print $0}' OFS=, a.txt
20170203, random text,-425,-611524.54
20170208, random text,-425,-611524.54
20170207, random text,-425,-611524.54
bash-4.1$ awk -F, '{a="date -d "$1" +%Y%m"; while (a |getline line){$1=line;}print $0}' OFS=, a.txt
201702, random text,-425,-611524.54
201702, random text,-425,-611524.54
201702, random text,-425,-611524.54
awk -F, 'NR==1{print;next}{a="date -d "$1" +%Y%m"; while (a |getline line){$1=line;}print $0}' OFS=, a.txt
Ubuntuを使用しているため、おそらくGNU awk
があり、便利な時刻と日付の関数を提供します。
echo "2017-03-02" | \
awk '{ gsub(/-/, " ", $1); t = mktime($1 " 0 0 0"); print strftime("%d-%m-%Y", t);}'