次のデータ構造を含むcsvファイルがあります:[MM / DD / YYYY]
1111,2222,3333,4444,5555,6666,7777,11/27/2017 18:58:48,11/27/2017 19:07:57
私の目標は、日付形式を[YYYY / MM / DD]に変更することです。
1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57
これを達成するためにawkを使用しようとしていますが、それを実行できる他のツールも使用できます。
答え1
Awk
解決策:
awk -F',' 'function reformat_date(c){ # `c` - column value as an argument
y = substr(c, 7, 4); # extract `year` value
sub(/\/[0-9]{4}/, "", c); # remove `year` value
return y"/"c # return rearranged `YYYY/MM/DD` value
}
{ $8 = reformat_date($8); $9 = reformat_date($9) }1' OFS=',' file.csv
出力例:
1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57
答え2
この試み:
sed -E 's|([0-9]{2}/[0-9]{2})/([0-9]{4})|\2/\1|g' file
または
perl -pe 's|(\d{2}/\d{2})/(\d{4})|$2/$1|g' file
出力:
1111,2222,3333,4444,5555,6666,7777,2017/11/27 18:58:48,2017/11/27 19:07:57
答え3
データに日付と同様のその他の形式が含まれていない場合は、sed
行全体を使用して日付を変更できます。
sed 's#\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)#\3/\1/\2#g'