2

バッチ/シェルスクリプトの初心者です。次のような CSV ファイルがあります。

Id  depId   Name    city    Date                    prod
12345   52845   ken LA  08.08.2013 16:06:53 KLS22
25685   28725   Larry   MA  09.03.2013 16:06:58 KLt35
58345   28545   ken LA  06.08.2013 16:06:53 KLS22
75885   98725   Gow CA  05.04.2013 16:06:58 KLt35

約2000件のレコード。列はタブで区切られています。日付列を次の形式に変更したいと思います。

DD_MM_YYY_hh_mm_ss

awkで次のようなことを試しました:

awk -F '' '{ ("date -d \""$5"\" \"+%Y:%m/%d %T\"") | getline $5; print }' myfile.csv

しかし、間違った出力が得られます。

次のような出力が期待されます。

Id  depId   Name    city    Date                    prod
58345   28545   ken LA  03_06_2013_23_00_00 KLS22
75885   98725   Gow CA  05_06_2013_23_00_00 KLt35

助けてください!ありがとう!!

4

2 に答える 2

1

片道awk:

$ awk 'NR>1{gsub(/\./,"_",$5);gsub(/:/,"_",$6);$5=$5"_"$6;$6=$NF;NF--}{$1=$1}1' OFS="\t" myfile.csv

テスト:

$ cat temp
Id  depId   Name    city    Date                    prod
12345   52845   ken LA  8.8.2013 16:06:53   KLS22
25685   28725   Larry   MA  9.3.2013 16:06:58   KLt35
58345   28545   ken LA  6.8.2013 16:06:53   KLS22
75885   98725   Gow CA  5.4.2013 16:06:58   KLt35

$ awk 'NR>1{gsub(/\./,"_",$5);gsub(/:/,"_",$6);$5=$5"_"$6;$6=$NF;NF--}{$1=$1}1' OFS="\t" temp
Id      depId   Name    city    Date    prod
12345   52845   ken     LA      8_8_2013_16_06_53       KLS22
25685   28725   Larry   MA      9_3_2013_16_06_58       KLt35
58345   28545   ken     LA      6_8_2013_16_06_53       KLS22
75885   98725   Gow     CA      5_4_2013_16_06_58       KLt35
于 2013-06-13T12:43:28.637 に答える
0

日付のように見える文字列が実際に正しい列にあるかどうかをチェックしない、より単純なアプローチ:

$ perl -pe 's/\t(\d)\.(\d)\.(\d\d\d\d) /sprintf("\t%04d-%02d-%02d ", $3, $2, $1) /e' t.csv
12345   52845   ken     LA      2013-08-08 16:06:53     KLS22
25685   28725   Larry   MA      2013-03-09 16:06:58     KLt35
于 2013-06-13T12:54:04.313 に答える