Bash Shell脚本-输出列格式
bash脚本产生以下输出:Bash Shell脚本-输出列格式,bash,shell,format,multiple-columns,Bash,Shell,Format,Multiple Columns,bash脚本产生以下输出: Computer_1 Netcom 1 Status_ok Computer_1 Netcom 2 Status_ok Computer_1 Netcom 3 Status_ok Computer_1 Netcom 4 Status_ok Computer_1 Netcom 5 Status_ok Computer_1 Netcom 6 Status_ok Computer_1 Netcom 7 Status_ok Computer_1 Netcom 8 Status
Computer_1 Netcom 1 Status_ok
Computer_1 Netcom 2 Status_ok
Computer_1 Netcom 3 Status_ok
Computer_1 Netcom 4 Status_ok
Computer_1 Netcom 5 Status_ok
Computer_1 Netcom 6 Status_ok
Computer_1 Netcom 7 Status_ok
Computer_1 Netcom 8 Status_ok
Computer_2 Netcom 9 Status_ok
Computer_2 Netcom 10 Status_ok
Computer_2 Netcom 11 Status_ok
Computer_2 Netcom 12 Status_ok
Computer_2 Netcom 13 Status_ok
Computer_2 Netcom 14 Status_ok
Computer_2 Netcom 15 Status_ok
Computer_2 Netcom 16 Status_ok
Computer_3 Netcom 17 Status_ok
Computer_3 Netcom 18 Status_ok
Computer_3 Netcom 19 Status_ok
Computer_3 Netcom 20 Status_ok
Computer_3 Netcom 21 Status_ok
Computer_3 Netcom 22 Status_ok
Computer_3 Netcom 23 Status_ok
Computer_3 Netcom 24 Status_ok
Computer_4 Netcom 25 Status_ok
Computer_4 Netcom 26 Status_ok
Computer_4 Netcom 27 Status_ok
Computer_4 Netcom 28 Status_ok
Computer_4 Netcom 29 Status_ok
Computer_4 Netcom 30 Status_ok
Computer_4 Netcom 31 Status_ok
Computer_4 Netcom 32 Status_ok
但是,我需要在四列中批量格式化输出组:
Computer_1 Computer_2 Computer_3 Computer_4
Netcom 1 Status_ok Netcom 9 Status_ok Netcom 17 Status_ok Netcom 25 Status_ok
Netcom 2 Status_ok Netcom 10 Status_ok Netcom 18 Status_ok Netcom 26 Status_ok
Netcom 3 Status_ok Netcom 11 Status_ok Netcom 19 Status_ok Netcom 27 Status_ok
Netcom 4 Status_ok Netcom 12 Status_ok Netcom 20 Status_ok Netcom 28 Status_ok
Netcom 5 Status_ok Netcom 13 Status_ok Netcom 21 Status_ok Netcom 29 Status_ok
Netcom 6 Status_ok Netcom 14 Status_ok Netcom 22 Status_ok Netcom 30 Status_ok
Netcom 7 Status_ok Netcom 15 Status_ok Netcom 23 Status_ok Netcom 31 Status_ok
Netcom 8 Status_ok Netcom 16 Status_ok Netcom 24 Status_ok Netcom 32 Status_ok
实现以下输出的性能解决方案是什么?这可能做得更好,但有一种方法 其中$1是bash脚本的输出 我使用awk删除第一个字段。 然后对行数进行迭代,并从输出中每隔8行读取一次。 然后将新行添加到选项卡中,使其看起来整洁 显然,如果您的记录或行数不断变化,或者其他任何情况,您可以在脚本开始时设置它们,并替换我的硬编码数字
#!/bin/bash
echo -e "Computer_1\t\tComputer_2\t\tComputer_3\t\tComputer_4"
line=$(awk '{ print $2, $3, $4 }' $1)
for ((i = 1 ; i < 9 ; i++)); do
linez=$(sed -n $i'~8p' <<< "$line")
linez2=$(tr "\n" "\t" <<< "$linez")
echo "$linez2"
done
#/bin/bash
echo-e“计算机\u 1\t\t计算机\u 2\t\t计算机\u 3\t\t计算机\u 4”
行=$(awk'{print$2,$3,$4}'$1)
(i=1;i<9;i++);做
linez=$(sed-n$i'~8p'pr
可以进行列格式设置。我在这里使用awk
来拆分列标题:
script.sh |
awk '
$1 != prev {print $1; prev=$1}
{for (i=2; i<=NF; i++) {$(i-1)=$i}; NF--; print}
' |
pr -t4 -w84 |
expand
Computer_1 Computer_2 Computer_3 Computer_4
Netcom 1 Status_ok Netcom 9 Status_ok Netcom 17 Status_ok Netcom 25 Status_ok
Netcom 2 Status_ok Netcom 10 Status_ok Netcom 18 Status_ok Netcom 26 Status_ok
Netcom 3 Status_ok Netcom 11 Status_ok Netcom 19 Status_ok Netcom 27 Status_ok
Netcom 4 Status_ok Netcom 12 Status_ok Netcom 20 Status_ok Netcom 28 Status_ok
Netcom 5 Status_ok Netcom 13 Status_ok Netcom 21 Status_ok Netcom 29 Status_ok
Netcom 6 Status_ok Netcom 14 Status_ok Netcom 22 Status_ok Netcom 30 Status_ok
Netcom 7 Status_ok Netcom 15 Status_ok Netcom 23 Status_ok Netcom 31 Status_ok
Netcom 8 Status_ok Netcom 16 Status_ok Netcom 24 Status_ok Netcom 32 Status_ok