首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将GNU awk命令转换为默认的macOS awk命令

将GNU awk命令转换为默认的macOS awk命令
EN

Stack Overflow用户
提问于 2021-09-22 00:31:11
回答 2查看 153关注 0票数 0

给定一个包含许多行的文件,例如:

代码语言:javascript
运行
复制
Z|X|20210903|07:00:00|S|33|27.71||

具有所需输出,例如:

代码语言:javascript
运行
复制
Z|X|20210903|07:00:00|S|33|27.71|||03-09-2021 07:00:00

此GNU awk命令有效:

代码语言:javascript
运行
复制
gawk -F'|' '{dt = gensub(/(....)(..)(..)/,"\\3-\\2-\\1",1,$3); print $0"|"dt,$4}' infile > outfile

但是,我需要它在默认安装的awk版本的macOS下工作,它会产生以下错误:

代码语言:javascript
运行
复制
awk: calling undefined function gensub
 input record number 1, file 
 source line number 1

我假设macOS中的默认awk版本太旧,不支持gensub函数。

请注意,我已经尝试了许多其他字符串函数,但都没有用。awk编程不是我的专业领域,我在上面的GNU awk命令中通过大量的谷歌搜索得出了结论,但我的google-fu在尝试与macOS awk一起工作时失败了。

上面的GNU awk命令可以被重写以与macOS Catalina中的默认版本的awk一起工作吗?如果可以,如何重写?

EN

Stack Overflow用户

发布于 2021-09-22 00:58:54

使用perl而不是gawk

代码语言:javascript
运行
复制
$ perl -lne '
   my @F = split /[|]/, $_, -1;
   my $dt = ($F[2] =~ s/(....)(..)(..)/$3-$2-$1/r);
   print join("|", @F, "$dt $F[3]")' <<<"Z|X|20210903|07:00:00|S|33|27.71||"
Z|X|20210903|07:00:00|S|33|27.71|||03-09-2021 07:00:00
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69276909

复制
相关文章

相似问题

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