awk:如果找不到模式,请在文件末尾添加一些文本

awk:如果找不到模式,请在文件末尾添加一些文本

使用awk,我们如何仅在底部添加文本如果没有找到某种模式在文件中?

这是行不通的:

awk '{if ($0 !~ /pattern/) {print}; END {print "someText"}}' file

文件很小,不到1MB。

答案1

另一种awk方法在处理大文件时速度要快一些,一旦退出就退出图案找到并将某些内容附加到文件中,如果图案没找到。

awk '/pattern/{found=1; exit}; END{ if(!found) print "append" >>FILENAME }' infile

或者使用grep

<infile grep -q pattern || echo 'appending...' >>infile

答案2

以下应该有效:

awk '/pattern/ {found=1} {print} END{if (!found) print "someText"}' file

这将先验打印整个文件({print}无条件规则),然后查找模式。如果找到,它会设置一个标志({found=1}条件为/pattern/,相当于$0 ~ /pattern/)。如果在文件末尾未设置该标志,则将"someText"打印 。

您可以将输出重定向到新文件,如下所示

awk ' <see above> ' file > newfile

或者,如果您有较新版本的 GNU awk,请使用“就地”编辑功能(小心!):

awk -i inplace ' <see above> ' file

相关内容