在管道分隔文件

2021-02-17 11:26

I中重新格式化时间戳有一个管道分隔文件,其日期时间格式为yyyymmddhhmmss,如下所示。John

解答动态

  • Doe

    • TEST

      • 20210728120821

        • john@test.com约翰

          • 戴维斯测试20210828120821

            • john@test.com约翰

              • 史密斯测试20210528120821

                • john@test.com I我正在尝试将第4列中的字符串转换为yyyy-mm-dd hh:mm:ss本
                  约翰

                  • 能源部

                    • 测试

                      • 2021-07-28 12:08:21

                        • john@test.com约翰

                          • 戴维斯测试2021-08-28 12:08:21

                            • john@test.com约翰

                              • 史密斯

                                • 测试

                                  • 2021-05-28 12:08:21

                                    • john@test.com As邮箱我对Linux中的文本处理还比较陌生,我搜索并尝试使用类似这样的awk
                                      awk-F";

                                      • quot;

                                        • quot;%Y-%m-%d%H:%m:%S";,$4);打印$0} 但它没有按预期进行转换。

                                          • 这些“时间戳”不是strftime()操作的epoch之后的秒,它们只是日期+时间,年、月等之间没有分隔符。您只需要简单的文本操作,不使用时间函数。
                                            与GNU awk(您已经在使用)for gensub():
                                            $awk'BEGIN{FS=OFS=";

                                            • quot;\\1-\\2-\\3\\4:\\5:\\6";,1,$4)}1'文件约翰

                                              • 能源部

                                                • 测试

                                                  • 2021-07-28 12:08:21

                                                    • john@test.com约翰

                                                      • 戴维斯测试2021-08-28 12:08:21

                                                        • john@test.com约翰

                                                          • 史密斯

                                                            • 测试

                                                              • 2021-05-28 12:08:21

                                                                • john@test.com 或任何awk:
                                                                  $awk'BEGIN{FS=OFS=";

                                                                  • quot;%s-%s-%s%s:%s:%s";,substr($4,1,4),substr($4,5,2),substr($4,7,2),substr($4,9,2),substr($4,11,2),substr($4,13,2) )}1'文件约翰

                                                                    • 能源部

                                                                      • 测试

                                                                        • 2021-07-28 12:08:21

                                                                          • john@test.com约翰

                                                                            • 戴维斯测试2021-08-28 12:08:21

                                                                              • john@test.com约翰

                                                                                • 史密斯

                                                                                  • 测试

                                                                                    • 2021-05-28 12:08:21

                                                                                      • john@test.com

                                                                                        • 假设:要更改的字段是唯一或第一个正好包含14位数字的字段。
                                                                                          sed-E's=\

                                                                                          • ([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})\\

                                                                                            • =

                                                                                              • \1-\2-\3\4: \5:\6

                                                                                                • =' 您的尝试失败,因为$4需要是UNIX Epoch时间(自1970年以来以秒为单位的时间),正如GNU Awk手册文档所述。

                                                                                                  • 如果您想使用类似strftime的方法,那么您可以考虑Miller,它还提供了相应的strtime ex.
                                                                                                    $mlr--nidx--fs'

                                                                                                    • 'put-S'$4=strftime(strftime($4,quot;),quot;)'文件约翰

                                                                                                      • 美国能源部

                                                                                                        • 测试

                                                                                                          • 2021-07-28 12:08:21约翰

                                                                                                            • 戴维斯

                                                                                                              • 测试

                                                                                                                • 2021-08-28 12:08:21约翰

                                                                                                                  • 史密斯

                                                                                                                    • 测试

                                                                                                                      • 2021-05-28 12:08:21

                                                                                                                        • End

                                                                                                                        免责声明:

                                                                                                                        本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。