我有一个awk
脚本,new.awk
:
BEGIN { FS = OFS = "," }
NR == 1 {
for (i = 1; i <= NF; i++)
f[$i] = i
}
NR > 1 {
begSecs = mktime(gensub(/[":-]/, " ", "g", $(f["DateTime"])))
endSecs = begSecs + $(f["TotalDuration"])
$(f["CallEndTime"]) = strftime("%Y-%m-%d %H:%M:%S", endSecs)
}
{ print }
我在 shell 中调用它
awk new.awk sample.csv
...但我可以看到终端的变化。如何在文件中进行就地更改,例如使用时sed -i
?
GNU
awk
(通常在 Linux 系统上找到),从 4.1.0 版开始,可以在命令行中或在命令行中包含“awk
源库” 。与 GNU 一起分发的源库之一称为:-i
--include
awk
inplace
如您所见,这使得
awk
代码的输出替换了输入文件。there
由于程序不输出它,所以不会保留这句话。使用
awk
文件中的脚本,您可以像这样使用它如果
awk
变量INPLACE_SUFFIX
设置为字符串,则库将备份原始文件,并将其作为文件名后缀。如果您有多个输入文件,则每个文件都可以单独就地编辑。
inplace=0
但是您可以通过在该文件之前的命令行上使用来关闭文件(或一组文件)的就地编辑:在上面的命令中,
file3
不会在原地编辑。要对单个文件进行更便携的“就地编辑”,请使用
这会将输入文件复制到临时位置,然后将
awk
代码应用于临时文件,同时重定向到原始文件名。按此顺序执行操作(
awk
在临时文件上运行,而不是在原始文件上运行)可确保不修改原始文件的文件元数据(权限和所有权)。尝试这个。