使用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