給定一個包含許多行的檔案,例如:
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
但是,我需要這個程式在macOS下作業,并使用默認安裝的awk版本,而它產生了以下錯誤:
awk: calling undefined function gensub
輸入記錄號1,檔案
源檔案的第1行
我假設macOS中的默認版本的awk太舊,不支持gensub函式。
注意,我已經嘗試了許多其他的字串函式,但都無濟于事。awk編程不是我的專業領域,我通過大量的google搜索得到了上面的GNU awk命令,但我的google-fu在試圖讓一些東西與macOS的awk作業時沒有成功。
上述GNU awk命令能否被改寫成與默認版本的awk一起作業,例如在macOS Catalina中,如果是這樣的話,如何改寫?
uj5u.com熱心網友回復:
你能不能嘗試一下下面的方法:
awk -F'|' '{dt=substr(3,7,2) "-" substr(3,5,2) "-" substr(3,1,4) ; print $0 "|" dt, 4}' infile > outfile
uj5u.com熱心網友回復:
使用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://www.uj5u.com/caozuo/332567.html
標籤:
下一篇:物件在Terraform之外發生了變化,隨后的"terraformapply"洗掉了資源,而腳本中沒有任何變化。
