请建议如何使用awk / perl one liner命令行验证以下内容
如果一个或多个值与120不同,我想检查DATA_ARRAY数组中的值是否正好为120,那么awk将给出错误
例如
如果所有值都是120
,则awk将为TRUEecho ${DATA_ARRAY[*]}
120 120 120 120
如果一个或多个值与120
不同,则awk将给出FALSEecho ${DATA_ARRAY[*]}
120 120 115 120
答案 0 :(得分: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"
}'
-v d="${DATA_ARRAY[*]}"
将数组作为变量d
传递给awk。BEGIN{}
当你没有stdin时要做的事情。n=split(d,a)
根据空格(默认分隔符)拆分数组。获得的字段数由split()
返回并保存到var n
。for (i=1;i<=n;i++) if (a[i]!=120) {print "False"; exit} print "True"
遍历数组元素,检查值是否为120.如果不是,则打印“False”并退出。如果没有退出,请打印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
要保存到变量中,请执行以下操作:
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"}')
答案 1 :(得分:1)
或强>
$ echo "${DATA_ARRAY[*]}" | awk '$1!=val{print "error"}' RS=' ' val="120"
<强> - 编辑 - 强>
$ echo "${DATA_ARRAY[*]}" | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="121"
对于变量
$ my_variable=$(echo "${DATA_ARRAY[*]}" | awk '!f && $1!=val{print "False"; f=1}END{if(!f)print "True"}' RS=' ' val="120")
测试
[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
答案 2 :(得分:1)
这个怎么样?还是单行。
[[ $(grep -wo 120 <<<${DATA_ARRAY[*]}|wc -l) -eq ${#DATA_ARRAY[*]} ]] && echo "true" || echo "fail"