繁体   English   中英

使用 bash 脚本在不同的列中打印多个不同大小的 arrays

[英]Print multiple different sized arrays in different columns using bash script

我正在尝试生成有关 linux 框的 state 的报告,其中包含一些摘要信息。 我使用 jps 使用正在运行的应用程序实例的名称填充多个 arrays。 然后我想在 4 列中打印这些排序的 arrays 以便我们可以轻松查看运行的内容。

我使用一些条件逻辑来确定哪个数组长度最长。 因为一些 arrays 比其他的短,简单循环最长的值会导致数组索引越界问题。 所以我想在该行没有值的列中打印一个空字符串。

下面的代码是我目前拥有的,但是当它尝试在循环内执行命令时会抛出“找不到命令”错误。 这个想法是尝试使用条件逻辑来确定当前数组是否超出范围,如果是,则打印“”。

我尝试使用 ` 使其显示为代码。 我也试过没有它们。 我试过没有“”和他们。 我试过在变量周围使用 ${ } 而没有。 我也尝试使用 ( ) 围绕值和不使用。

我不太了解此代码的幕后发生了什么,并且在 Windows 机器代码上编写脚本,该机器代码用于命令行 linux 框不容易调试。 有什么建议么?

printf "| %-40s | %-40s | %-40s | %-40s |\n" "Array 1:" "Array 2:" "Array 3:" "Array 4:" >> ${OUTPUT}
for i in $(seq ${maxRows}); do
    (The command below is all on one line but to make it more readable here I entered on multiple.)
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "`[[ ${i} > ${#Array1[@]} ]] && ("") ||
    ("${Array1[$i]}")`" "`[[ $i > ${#Array2[@]} ]] && "" || ${Array2[$i]}`" "`[[ $i > ${#Array3[@]} ]] 
    && "" || ${Array3[$i]}`" "`[[ $i > ${#Array4[@]} ]] && "" || ${Array4[$i]}`" >> ${OUTPUT}
done

在 bash 中,可以访问没有值的数组元素,并且将返回未定义的值,该值将显示为空字符串。 无需检查单个数组索引限制。

从技术上讲,在循环中引用 printf 存在多个问题。 选择:

for i in $(seq ${maxRows}); do
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "${Array1[$i]}" "${Array2[$i]", "${Array4[$i]}" "${Array3[$i]}" >> $OUTPUT
done

旁注:这种方法将施加 maxRows 的限制,因为它将要求列表 1 2 3... maxRows 适合单行。 对于更高的限制

for ((i=1; i<=maxRows; i++)); do
    printf "| %-40s | %-40s | %-40s | %-40s |\n" "${Array1[$i]}" "${Array2[$i]", "${Array4[$i]}" "${Array3[$i]}" >> $OUTPUT
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM