首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编辑Linux文本文件中的行??将日期格式化为YYYY-MM,然后按时间周期对该行进行grep。

问如何编辑Linux文本文件中的行??将日期格式化为YYYY-MM,然后按时间周期对该行进行grep。
EN

Stack Overflow用户
提问于 2022-08-06 10:19:03
回答 5查看 234关注 0票数 0

有人能帮助使用bash脚本或Linux命令行将此文本文件(YYYYMMDD)格式化为日期格式(YYYYMMDD DD)文本文件吗?我不知道如何开始编辑2300万行!

我有YYYYMMDD格式文本文件:-

代码语言:javascript
复制
3515034013|50008|20140601|20240730

而且我想编辑类似于YYYY DD格式的文本文件(只需要修改第3和第4个字段就可以修改2300万行):-

代码语言:javascript
复制
3515034013|50008|2014-06-01|2024-07-30

我想要从YYYYMMDD格式的文本文件转换为YYYYMMDD MM格式,并且我希望根据这个文件操作后的时间,从文本文件中获得特定的行,这是最终目标。

最终目标是将第三个字段和第四个字段格式化为YYYY DD,并希望grep按日期从格式化的文本文件中按日期排列:-03字段是开始日期,第04字段是结束日期,例如,我需要(01)。今天之前的结束日期(第04字段),即2022-08-06 -所有旧行(02)。结束日期(第04字段)从现在起2年,即在2022-08-06 <-> 2024-08-06之间的线?

请注意:-有超过2300万行编辑和分析的基础上的日期。

如何处理这个问题陈述?哪种方法是时间高效的awk或sed或Bash逐行编辑?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-08-06 11:28:14

代码语言:javascript
复制
$ awk '
    BEGIN { FS=OFS="|" }
    {
        for ( i=3; i<=4; i++ ) {
            $i = substr($i,1,4) "-" substr($i,5,2) "-" substr($i,7)
        }
        print
    } 
' file
3515034013|50008|2014-06-01|2024-07-30
票数 2
EN

Stack Overflow用户

发布于 2022-08-06 10:37:57

以下是用awk更改格式的一种方法

代码语言:javascript
复制
awk '{$3=substr($3,1,4) "-" substr($3,5,2) "-" substr($3,7,2); $4=substr($4,1,4) "-" substr($4,5,2) "-" substr($4,7,2); print}' FS='|' OFS='|'

考虑到这一点,它应该有效。

  • |仅用于现场分离。
  • 所有日期的格式相同。

您可以将转换后的行输送到一个新文件中,也可以将其更改为就位。当然,您也可以对sed或ed进行同样的操作。我之所以选择awk,是因为您可以在相同的运行到一个额外的文件中提取特定的行。

票数 0
EN

Stack Overflow用户

发布于 2022-08-06 11:15:05

这里有一种使用sed的方法。它与斯蒂芬斯的回答:|作为字段分隔符具有相同的限制,并且所有日期都具有相同的格式,即月份和日期部分中的前导零。

代码语言:javascript
复制
sed -E 's/^(.*[|])([0-9]{4})([0-9]{2})([0-9]{2})[|]([0-9]{4})([0-9]{2})([0-9]{2})$/\1\2-\3-\4|\5-\6-\7/g'

以下是正则表达式的作用:

  • ^(.*[|])将字符串的第一部分从linestart (^)捕获到|到\1,这将捕获前两列,因为re的其余部分与行的其余部分匹配,直到lineend!
  • ([0-9]{4})([0-9]{2})([0-9]{2})[|]将第一个日期字段部分捕获到\2到\4中,注意[|]
  • ([0-9]{4})([0-9]{2})([0-9]{2})$对锚定在lineend ($)的第二个日期列也是这样,并将部分捕获到\5到\7中,注意$
  • 替换部件\1\2-\3-\4|\5-\6-\7在不同的位置插入-
  • 捕获到\n是因为正则表达式中使用了(...) parens。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73258912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档