当前位置: 首页 > 知识库问答 >
问题:

如何使用shell转换为日期格式(DD、MMMYYYY)?

毕宏盛
2023-03-14

我在一个文件中有数据,其中一列是日期列,其日期格式如下:

2021-05-10T18:25:00.000+0100
2021-05-14T18:25:00.000+0100
2021-05-19T18:25:00.000+0100
10 MAY 2021
14 MAY 2021
19 MAY 2021

我尝试过的方法:

while -r read line
do
    year=`echo $line | awk '{ print $1 }' `
    month=`echo $line | awk '{ print $2 }' `
    dt=`echo $line | awk '{ print $3 }' `

    v=$dt"-"$month"-"$year
    d=date '`$v' | dd-mm-yyyy
    echo $d
done < /f/filename.txt

共有1个答案

宿衡虑
2023-03-14

您在尝试中遇到了一些语法和设计问题。

我并不特别推荐使用shell进行此操作;其他简单的date以及Awk和Perl等解决方案对于这个特定的任务肯定更好,无论是在可用性、可读性还是性能方面。但在某些情况下,您确实想要或需要使用shell,因此了解正确的语法是什么很重要。

因此,对于记录来说,shell完全能够将输入行以空格形式拆分为变量,或者将ifs设置为的任何形式拆分为变量。

while IFS='-T' read -r year month dt _;
do
    date -d "$year-$month-$dt" +"%d %b %Y"
done < /f/filename.txt

d=date whatever将文字字符串date赋给变量d,然后尝试将whatever作为命令运行,但可能会失败。但是当然,创建一个变量只是为了让您可以立即echo这只是对echo的一种无用的使用。

date-d是GNU的变体;在*BSD(包括macOS)上,您需要类似日期-j-f%y-%m-%d+“%d%b%y”2021-05-28

我不认为strftime提供了月名的大写版本;如果大喊大叫对你来说很重要,也许可以

done <file | tr a-z A-Z

格式代码%b取决于区域设置;如果您想强制使用英文(或传统的)月份名称,请尝试lc_time=posix date(请注意我们是如何使用我上面解释的语法的!)

 类似资料:
  • 问题内容: 2012年12月1日星期六00:00:00 GMT 我必须将以上日期转换为以下格式 2012-12-01 我怎样才能? 我已经尝试使用以下方法,但无法正常工作 问题答案: 用这个。 您将获得输出为

  • 问题内容: 我需要将 长 日期值转换为 mm / dd / yyyy 格式。我的长值是 请帮我 问题答案: 请参阅下面的代码,这些代码以字符串形式给出日期。

  • 问题内容: 有mySQL函数将日期从dd.mm.yy格式转换为YYYY-MM-DD吗? 例如,。 问题答案: 由于您输入的内容是字符串形式的字符串,因此我假设(因为今天是2013年9月3日)它是。您可以使用将该日期转换为日期: 然后,您可以使用以下命令将其格式化为字符串: 请注意,今年是(小写的“y”)中和(大写的“Y”)中。小写版本用于两位数年份,大写版本用于四位数年份。

  • 问题内容: 我正在尝试从转换日期。我已经使用了mktime()函数和其他函数,但是我似乎无法使其工作。我已经成功地将原始日期用作定界符,但更改格式并将其与交换时没有成功。 任何帮助将不胜感激。 问题答案: 通过查看各个组成部分之间的分隔符,可以消除或格式中的日期的歧义:如果该分隔符是斜杠(),则假定为American ;否则,为0。反之,如果分隔符是破折号()或点(),则采用欧洲格式。 使用默认的

  • 我有一个格式为。我希望它的格式为 下面是我尝试进行此转换的示例util: 但是,我得到的输出不是格式。 请告诉我如何将从格式化为