Please advice how to verify with awk / perl one liner command line the following
I want to check if the values from DATA_ARRAY array are exactly 120 if one or more values are different from 120 then awk will give false
For example
Awk will give TRUE if all values are 120
echo ${DATA_ARRAY[*]}
120 120 120 120
Awk will give FALSE if one or more values are different from 120
echo ${DATA_ARRAY[*]}
120 120 115 120
You can do this:
$ awk -v d="${DATA_ARRAY[*]}"
'BEGIN{
n=split(d,a);
for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit}
print "True"
}'
-vd="${DATA_ARRAY[*]}"
passes the array to awk as the variable d
. BEGIN{}
things to do when you do not have any stdin. n=split(d,a)
split the array based on space (the default separator). The number of fields obtained is returned by split()
and saved into var n
. for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"
for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"
loop through the array elements checking if the value is 120. If not, print "False" and exit. If no exit has happened, print True. $ DATA_ARRAY=(120 120 120)
$ awk -v d="${DATA_ARRAY[*]}" 'BEGIN{ n=split(d,a); for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"}'
True
$ DATA_ARRAY=(120 120 1)
$ awk -v d="${DATA_ARRAY[*]}" 'BEGIN{ n=split(d,a); for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"}'
False
To save into a variable, do:
myvar=$(awk -v d="${DATA_ARRAY[*]}" 'BEGIN{ n=split(d,a); for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"}')
OR
$ echo "${DATA_ARRAY[*]}" | awk '$1!=val{print "error"}' RS=' ' val="120"
--edit--
$ echo "${DATA_ARRAY[*]}" | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="121"
For Variable
$ my_variable=$(echo "${DATA_ARRAY[*]}" | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="120")
Test
[akshay@aix tmp]$ DATA_ARRAY=(120 120 120 120)
[akshay@aix tmp]$ my_variable=$(echo "${DATA_ARRAY[*]"} | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="120")
[akshay@aix tmp]$ echo $my_variable
True
[akshay@aix tmp]$ DATA_ARRAY=(120 120 120 125)
[akshay@aix tmp]$ my_variable=$(echo "${DATA_ARRAY[*]}" | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="120")
[akshay@aix tmp]$ echo $my_variable
False
How about this? Still one-liner.
[[ $(grep -wo 120 <<<${DATA_ARRAY[*]}|wc -l) -eq ${#DATA_ARRAY[*]} ]] && echo "true" || echo "fail"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.