给定一个包含许多行的文件,例如:
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
此GNU awk命令有效:
gawk -F'|' '{dt = gensub(/(....)(..)(..)/,"\\3-\\2-\\1",1,$3); print $0"|"dt,$4}' infile > outfile
但是,我需要它在默认安装的awk
版本的macOS下工作,它会产生以下错误:
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
一起工作吗?如果可以,如何重写?
发布于 2021-09-22 00:58:54
使用perl
而不是gawk
$ 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
https://stackoverflow.com/questions/69276909
复制相似问题