I want to add a new line before "Realized" only when it comes after "Sheep".
There may be any line betwwen "Sheep" and "Realized" other than this two.
Say my new line is "a goat", so the desired result would be
$ awk '/Sheep/{F=1} /Realized/{if(F){print "a goat"}else{F=""}} {print}' file
Cat
Realized
Dog
Realized
Sheep
s
d
f
jk
a goat
Realized
Wolf
a goat
Realized
Sheep
s
d
a goat
Realized
An explanation of my previous post follows.
The shell runs the awk command and passes a (multi-line) argument in ticks, and another argument (file). (The ticks are also called single quotes.)
The awk sees two statements in the 1st argument.
awk statements are usually in curly brackets. Here they are prefixed with a condition (implicit if clause).
Multiple statements in a curly bracket block are separated by a semicolon - or are on separate lines.
awk runs the statements for each line of its input file(s).
The logic is simple here:
if Sheep is found in the current input line, store 1 in a variable (count). Note that initially a variable is empty (0 in number context).
If found is equal to 1 (because was set to 1 in this or a previous input line) and Realized is found in the current input line then print the new line; also reset found to 0 so if Realized is met again it won't print another new line.
Then (I just added it to my previous post) print the input line.