awk - 添加一行,当且仅当该行不存在时

Abo*_*yès 3 awk

我想awk用来解析一个文件,并添加一行,当且仅当该行不存在时。

我的文件:

cccc
dddd
aaaa
mmm
Run Code Online (Sandbox Code Playgroud)

示例 1:我正在寻找“ aaaa

“aaaa”存在所以,没有任何反应,输出文件将是相同的。

示例 2:我正在寻找“ bbbb

“bbbb”不存在。我的输出文件应该是:

cccc
dddd
aaaa
mmm
bbbb
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个结果?

ste*_*ver 6

$ awk -v x='aaaa' '$0 == x {found=1} END {if(!found) print x} 1' file
cccc
dddd
aaaa
mmm

$ awk -v x='bbbb' '$0 == x {found=1} END {if(!found) print x} 1' file
cccc
dddd
aaaa
mmm
bbbb
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

如果你想一次处理这个

line=aaaa
grep -Fx -q "$line" file || echo "$line" >> file
Run Code Online (Sandbox Code Playgroud)

如果你预先知道所有的可能性,那么这可能更有效:

$ cat lines_to_add
aaaa
bbbb

$ grep -Fx -f file -v lines_to_add >> file

$ cat file
cccc
dddd
aaaa
mmm
bbbb
Run Code Online (Sandbox Code Playgroud)