将CSV文件中的第一列从时间戳转换为年月格式

时间:2019-04-25 20:42:42

标签: bash awk sed

试图将csv文件中的第一列从unix时间戳转换为日期(年月格式)

尝试过date -d @number'+%Y-%m'awk,但是awk不能与@一起使用

从csv文件中提取:

 1556113878,60662402644292
 1554090396,59547403093308

预期O / p

2019-04,60662402644292
2019-03,59547403093308

2 个答案:

答案 0 :(得分:3)

如果您有GNU awk(有时称为gawk),请尝试:

gawk -F,  '{print strftime("%Y-%m", $1),$2}' OFS=, file.csv

例如,考虑以下输入文件:

$ cat file.csv
1556113878,60662402644292
1554090396,59547403093308

我们的命令产生以下输出:

$ gawk -F,  '{print strftime("%Y-%m", $1),$2}' OFS=, file.csv
2019-04,60662402644292
2019-03,59547403093308

在许多Linux系统上,GNU awk是默认设置。在其他类似Ubuntu的系统上,它不是,但可以轻松安装:sudo apt-get install gawk。在MacOS上,可以通过自制软件安装GNU awk。

答案 1 :(得分:0)

如果您没有GNU AWK,则可能有系统Ruby,在这种情况下,您可以这样做:

▶ ruby -F, -ane \
   '$F[0] = Time.at($F[0].to_i).strftime("%Y-%m"); print $F.join(",")' FILE      
2019-04,60662402644292
2019-04,59547403093308

进一步的解释:

  • 与Perl的POSIX::strftime不同,系统Ruby应该随Time模块一起提供。因此,我选择了Ruby。

  • 命令行选项-F,与AWK相同; -n与sed相同; -a打开类似AWK的自动拆分; -e与sed相同。

  • $F与AWK的$0类似,而$F[0]与AWK的$1类似。 $F[0].to_i将第一个字段中的纪元时间字符串转换为整数。