首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用awk命令将查找输出写入同一文件

如何使用awk命令将查找输出写入同一文件
EN

Stack Overflow用户
提问于 2011-11-05 18:36:32
回答 6查看 36.7K关注 0票数 38
代码语言:javascript
复制
awk '/^nameserver/ && !modif { printf("nameserver 127.0.0.1\n"); modif=1 } {print}' testfile.txt

它正在显示输出,但我想将输出写入同一个文件。在我的示例中是testfile.txt

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-05 18:39:41

本质上是不可能的。您需要第二个临时文件,因为您不能读取和覆盖相同的文件。类似于:

代码语言:javascript
复制
awk '(PROGRAM)' testfile.txt > testfile.tmp && mv testfile.tmp testfile.txt

mktemp程序对于生成唯一的临时文件名非常有用。

有一些技巧可以避免临时文件,但它们主要依赖于缓存和读取缓冲区,对于较大的文件很快就会变得不稳定。

票数 61
EN

Stack Overflow用户

发布于 2015-05-21 02:26:15

从GNU Awk 4.1.0开始,就有了"inplace“扩展,所以你可以这样做:

代码语言:javascript
复制
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3

要保留原始文件的备份副本,请尝试执行以下操作:

代码语言:javascript
复制
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3

这可以用来模拟GNU sed -i特性。

请参阅:Enabling In-Place File Editing

票数 16
EN

Stack Overflow用户

发布于 2014-10-30 18:17:06

您也可以使用moreutils中的sponge

例如

代码语言:javascript
复制
awk '!a[$0]++' file|sponge file

删除重复行,并

代码语言:javascript
复制
 awk '{$2=10*$2}1' file|sponge file

将第二列乘以10。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8019617

复制
相关文章

相似问题

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