linux 替换文件中日期格式,linux – 使用awk / sed在第一列中更改日期格式

我有一个shell脚本,每天早上自动运行,将该天结果附加到文本文件.该文件应该在第一列上有今天的日期,后面跟逗号分隔的结果.我使用命令date%x来获取所需格式的日期(dd / mm / yy).但是在一台计算机上,%x返回mm / dd / yyyy(任何想法为什么会这样?).然后我按日期顺序对文件中的数据进行排序.

这是一个这样的文本文件的片段

29/11/12,9654.80,194.32,2.01,7.19,-7.89,7.65,7.57,3.98,9625.27,160.10,1.66,4.90,-4.79,6.83,4.84,3.54

03/12/12,5184.22,104.63,2.02,6.88,-6.49,7.87,6.67,4.10,5169.52,93.81,1.81,5.29,-5.45,7.87,5.37,4.10

04/12/12,5183.65,103.18,1.99,6.49,-6.80,8.40,6.66,4.38,5166.04,95.44,1.85,6.04,-6.49,8.40,6.28,4.38

11/07/2012,5183.65,102.15,1.97,6.78,-6.36,8.92,6.56,4.67,5169.48,96.67,1.87,5.56,-6.10,8.92,5.85,4.67

07/11/2012,5179.39,115.57,2.23,7.64,-6.61,8.83,7.09,4.62,5150.17,103.52,2.01,7.01,-6.08,8.16,6.51,4.26

11/26/2012,5182.66,103.30,1.99,7.07,-5.76,7.38,6.37,3.83,5162.81,95.47,1.85,6.34,-5.40,6.65,5.84,3.44

11/30/2012,5180.82,95.19,1.84,6.51,-5.40,7.91,5.92,4.12,5163.98,91.82,1.78,5.58,-5.07,7.05,5.31,3.65

是否可以使用awk或sed将后四行的日期格式更改为正确的日期格式?我只希望将mm / dd / yyyy形式的日期格式更改为dd / mm / yy.

解决方法:

看起来你正在使用两种不同风格(版本)的日期.要检查你有哪些版本,我认为GNU日期接受–version标志,而其他版本,如BSD / OSX将不接受此标志.

由于您可能使用完全不同的系统,因此最安全地避免使用日期并使用perl打印当前日期可能是最安全的:

perl -MPOSIX -e 'print POSIX::strftime("%d/%m/%y", localtime) . "\n"'

如果你确定你在两台机器上都有GNU awk,你可以像这样使用它:

awk 'BEGIN { print strftime("%d/%m/%y") }'

要修复你已经获得的文件,这是我使用GNU awk的看法:

awk '{ print gensub(/^(..\/)(..\/)..(..,)/, "\\2\\1\\3", "g"); next }1' file

或使用sed:

sed 's/^\(..\/\)\(..\/\)..\(..,\)/\2\1\3/' file

结果:

29/11/12,9654.80,194.32,2.01,7.19,-7.89,7.65,7.57,3.98,9625.27,160.10,1.66,4.90,-4.79,6.83,4.84,3.54

03/12/12,5184.22,104.63,2.02,6.88,-6.49,7.87,6.67,4.10,5169.52,93.81,1.81,5.29,-5.45,7.87,5.37,4.10

04/12/12,5183.65,103.18,1.99,6.49,-6.80,8.40,6.66,4.38,5166.04,95.44,1.85,6.04,-6.49,8.40,6.28,4.38

07/11/12,5183.65,102.15,1.97,6.78,-6.36,8.92,6.56,4.67,5169.48,96.67,1.87,5.56,-6.10,8.92,5.85,4.67

11/07/12,5179.39,115.57,2.23,7.64,-6.61,8.83,7.09,4.62,5150.17,103.52,2.01,7.01,-6.08,8.16,6.51,4.26

26/11/12,5182.66,103.30,1.99,7.07,-5.76,7.38,6.37,3.83,5162.81,95.47,1.85,6.34,-5.40,6.65,5.84,3.44

30/11/12,5180.82,95.19,1.84,6.51,-5.40,7.91,5.92,4.12,5163.98,91.82,1.78,5.58,-5.07,7.05,5.31,3.65

标签:linux,awk,sed

来源: https://codeday.me/bug/20190725/1536474.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值