试图将csv文件中的第一列从unix时间戳转换为日期(年月格式)
尝试过date -d @number'+%Y-%m'
和awk
,但是awk
不能与@一起使用
从csv文件中提取:
1556113878,60662402644292
1554090396,59547403093308
预期O / p
2019-04,60662402644292
2019-03,59547403093308
答案 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
将第一个字段中的纪元时间字符串转换为整数。