回答
在最新的GNU awk中(因为4.1.0 released),它具有"inplace" file editing的选项:
[...]的 “就地” 扩展名,使用新设施建成,可以用来模拟GNU “
sed -i
”功能。 [...]
用法示例:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
保留备份:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
@sudo_O - 感谢“就地”演示。 Upvoted你的答案! – lind 2013-05-14 19:03:57
看起来选项可能已被删除?对于4.1.3,我有“-i includefile \t \t --include = includefile” – 2016-06-18 11:46:31
@Keith我有同样的问题。我只是试了一下,它在我的4.1.3上运行。根据[iiSeymour的回答](http://stackoverflow.com/a/16529730/2877364),'inplace'实际上是一个包含'gawk'的库,所以'inplace'是可以作为includefile包含的东西。 – cxw 2016-06-23 20:16:32
除非你有GNU AWK 4.1.0或更高版本...
你不会有这样的选择,因为sed中的-i
选项,而不是做:
$ awk '{print $0}' file > tmp && mv tmp file
注:-i
不是魔术,它也是创建一个临时文件sed
只是为你处理它。
作为GNU awk的4.1.0 ...
GNU awk
版本4.1.0 (发布2013年10月5日)加入此功能。它没有直前锋刚刚给-i
选项,在发布的说明中介绍:
(从xgawk)新-i选项用于装载awk的库文件。这与-f不同,因为第一个非选项参数 被视为脚本。
您需要使用捆绑inplace.awk
包括文件来正确调用扩展,像这样:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
变量INPLACE_SUFFIX
可用于指定扩展的备份文件:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
我很高兴这个功能已被添加,但对我来说,执行并不是很强硬,因为功能与语言的简洁性和-i inplace
是8 c汉字长I.M.O。
这是一个链接到manual的官方词汇。
这不能工作:
someprocess <file> file
前壳切换控制权交给someprocess(redirections)执行重定向。 >
重定向将截断文件为零大小(redirecting output)。因此,当某个进程启动并想从文件中读取时,就没有数据可供读取。
如果你想要一个只有AWK-解决方案,而创建一个临时文件和能与版本!=(gawk 4.1.0):
awk '{a[b++]=$0} END {for(c=0;c<=b;c++)print a[c]>ARGV[1]}' file
但是,这是否缓冲整个文件到内存?考虑一个20GB的文件。 – 2016-11-29 23:52:30
只是一个小工程
echo "$(awk '{awk code}' file)" > file
将无法使用:换行符。 – Lloeki 2016-01-14 13:48:05
@Lloeki谢谢,我已经修复了答案:) – 2016-09-05 06:56:55
下将无法正常工作
echo $(awk '{awk code}' file) > file
这应该工作
echo "$(awk '{awk code}' file)" > file
另一种方法是使用sponge
:
awk '{print $0}' your_file | sponge your_file
当您更换'{print $0}'
r awk脚本和your_file
按您想要编辑的文件的名称。
sponge
在将其保存到文件之前完全吸收输入。
使用三通
awk '{awk code}' file | tee file
的tee
命令发生和awk
命令完成由于|
之后执行。
- 1. 保存到使用awk
- 2. 修改sslsniff以保存.pcap
- 3. Gridview行不保存修改
- 4. 保存Grails域名修改
- 5. 保存DOM为HTML修改
- 6. sed&awk,第二列修改
- 7. 用awk修改输出
- 8. 使用awk/sed修改datetime
- 9. 使用awk修改文本
- 10. awk中:修改CSV含头
- 11. Android:修改并保存位图,如何避免OOM?
- 12. 修改重复行删除,订单保留,单行awk命令
- 13. 使用javascript加载/修改/保存XML
- 14. 保存电子邮件修改
- 15. 从文件修改图像并保存
- 16. 修改并保存数组中的值
- 17. CR4E Crystal Reports保存修改ChartObject
- 18. 如何在修改后保存图片
- 19. 在保存AVCaptureMovieFileOutput之前修改AVCaptureSession
- 20. 打开XML,修改并再次保存
- 21. 根据记录保存修改模板
- 22. 如何保存注释项修改
- 23. Django管理站点修改保存
- 24. 修改Linux文件,并在Python保存
- 25. MATLAB:修改XML文件并保存
- 26. WordPress多次修改每分钟保存
- 27. 有肖像保存修改后的值
- 28. 猫鼬:查找,修改,保存
- 29. Django模型保存创建和修改
- 30. 修改代码保存为jpeg
另请参阅http://serverfault.com/a/547331/313521,以获得“通过重定向编辑文件”的更一般答案。 – Wildcard 2015-11-04 03:29:34