【问题标题】:convert first column in a csv file from timestamp to year-month format将 csv 文件中的第一列从时间戳转换为年月格式
【发布时间】:2025-12-15 16:50:01
【问题描述】:

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

试过date -d @number'+%Y-%m'awk,但awk一起使用时无法识别@

从 csv 文件中提取:

 1556113878,60662402644292
 1554090396,59547403093308

预期的 O/p

2019-04,60662402644292
2019-03,59547403093308

【问题讨论】:

标签: bash awk sed


【解决方案1】:

如果您有 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 上,可以通过 homebrew 安装 GNU awk。

【讨论】:

  • 这非常感谢。为您的帖子点赞,但似乎没有出现新手演员阵容
  • @Bt_code 很高兴它对你有用,谢谢。 (如果我没记错的话,需要 15 个代表点才能投赞成票。)
【解决方案2】:

如果你没有 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 将第一个字段中的 Epoch 时间字符串转换为整数。

【讨论】:

    最近更新 更多