我正在使用bash脚本,由于某些原因,我只能使用bash而不是php或perl等。
我用这段代码从mysql中得到了一些结果,并将它们保存在名为result
的变量中:
result=$(mysql -NB -u "$mysqlUser" -p"$mysqlPass" -D "$mysqlDb" -e "select * from sites" )
这是结果:
1 news.bitcoin.com NULL 840119 stopped 1509636516 1509636688 0 0 0 0
2 blog.blockchain.com NULL NULL stopped NULL 0 0 0 0 0
现在我要逐行解析此结果,并将每行转换为一个数组,然后以这种方式访问它们,例如:
echo $results[0,0] # 1
echo $results[0,3] # 840119
echo $results[0,6] # 1509636688
echo $results[1,1] # blog.blockchain.com
echo $results[1,3] # NULL
echo $results[1,6] # 0
根据this post,我们可以通过andices声明数组,例如多维。
您能帮我解决这个问题,还是将其他可能的方法告知我来完成此任务?
预先感谢
答案 0 :(得分:0)
忽略了字段将不匹配的偏执狂,您可以尝试遍历数据并通过蛮力将其分配给并行数组。
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vee-validate/2.0.9/vee-validate.min.js"></script>
<script>
formsubmitval = 1;
Vue.use(VeeValidate);
new Vue({
el: "#app",
template: '#app',
data() {
return {
cust_name_first: null,
cust_id: null,
sales_name_first: null,
};
},
methods: {
doSubmit() {
this.$validator.validateAll().then(function(result){
if (!result){
//this means a validation failed, so exit without doing anything
return;
}
//here you would put your form submit stuff
formsubmitval=0;
document.getElementById('webform').submit();
});
}
}
});
if (formsubmitval==1)
{
window.onbeforeunload = function(e) {
e = e || window.event;
e.preventDefault = true;
e.cancelBubble = true;
e.returnValue = 'test';
}
}
</script>
请使用比a,b,c ...更好的名称,但是假设字段2是fqdn,您可以说
row=0
declare -a A B C D
mysql -NB -u "$mysqlUser" -p"$mysqlPass" -D "$mysqlDb" -e "select * from sites" |
while read a b c d # ...
do (( row++ ))
A[$row]="$a"
B[$row]="$b"
C[$row]="$c"
D[$row]="$d"
done
快速从该行中获取该字段。整个桌子都可以立即使用...但是一条格式错误的行将把您射向地面。
答案 1 :(得分:0)
将您的输出转换为csv-选中How to output MySQL query results in CSV format? 一种(不好)的方法是:
csv=`echo "${result}" | tr '\t' ','`
然后做魔术:
declare -A output
IFS=$'\r\n' GLOBIGNORE='*' command eval 'lines=($(echo "${csv}"))'
for (( i=0; i<${#lines[@]}; i++ ));
do
IFS=$',' GLOBIGNORE='*' command eval 'oneline=($(echo "${lines[$i]}"))'
for (( j=0; j<${#oneline[@]}; j++ ));
do
output[$i,$j]=${oneline[$j]}
done
done
最后
echo "${output[0,0]}" # 1
echo "${output[0,3]}" # 840119
echo "${output[0,6]}" # 1509636688
echo "${output[1,1]}" # blog.blockchain.com
echo "${output[1,3]}" # NULL
echo "${output[1,6]}" # 0
请注意所有双引号和大括号。
感谢https://stackoverflow.com/a/11393884/2235381和https://stackoverflow.com/a/22432604/2235381
答案 2 :(得分:0)
最终,我的问题以这种方式解决了:
apache
和结果:
declare -A results
row=0
while read -r line; do
if [[ -z "${line// }" ]]; then
continue
fi
declare -a temp2=($line)
for (( col=0; col<${#temp2[@]}; col++ ));
do
results[$row,$col]=${temp2[$col]}
done
results[cols]=$(( ${#temp2[@]}-1 ))
((row++))
done <<< "$result"
results[rows]=$row