awk每个文件更改一次

时间:2013-11-25 05:42:55

标签: awk gawk

awk -i inplace '
  BEGIN {FS=" "}
  BEGINFILE {changed=0} 
  { print;if ($1 == "namespace" && !changed) {print "foo";changed=1} }
' *

有更优雅的方法吗?我错过了一些内置的构造?我正在运行GNU Awk 4.1.0(我非常高兴-i inplace)。

2 个答案:

答案 0 :(得分:1)

你可以说:

... -F' ' '$1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' file

甚至:

... -F' ' '$1 == "namespace" && !_ {$0=$0 RS "foo";_=1}1' file

正如上面的评论中所提到的,这与你所写的非常类似,只是它使用RS变量来插入文本。


为了对多个文件执行此操作,您需要重置变量:

... -F' ' 'BEGINFILE {a=0} $1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' *

... -F' ' 'FNR==1 {a=0} $1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' *

答案 1 :(得分:1)

awk -i inplace '$1=="namespace" && !seen[ARGIND]++ {$0=$0 ORS "foo"} 1' *

FS=" "是默认值,无需明确指定。