I am writing an awk script which looks like this inside:
JavaScript
x
awk -v searchValue="$searchValue" '{ if ($3 == searchValue){
printf NR".", $1, $2, $3, $4
}
else if ($3!=searchValue) {print "The value that you entered is not available. Please try again."}
}' file
This is my file.
JavaScript
One Two 20 100
Three Four 10 500
Five Six 30 800
Seven Eight 20 500
This tries to print the else if method once, but instead, it prints for all of the lines that do not include the searched value. If I entered 20, my output looks like this:
JavaScript
1. One Two 20 100
The value that you entered is not available. Please try again.
The value that you entered is not available. Please try again.
4. Four Five 20 500
I have to use the awk command to print else if output once. Let’s say if I entered 700. How do I fix it to get this:
JavaScript
The value that you entered is not available. Please try again.
Advertisement
Answer
Perhaps a solution using the END
clause? You can set a variable if you find a match, and then use an if
in the END
to print the message only if no matches are found.
JavaScript
awk -v searchValue="$searchValue" '
$3 == searchValue { ismatch = 1; print NR".", $0; }
END {
if(!ismatch) print "The value that you entered is not available. Please try again."
}' file
Also I’m not sure you really want to be using printf
… plain old print
seems a better fit here. And $0
is a little easier than listing out $1, $2, $3, $4
.