Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本-输出列格式_Bash_Shell_Format_Multiple Columns - Fatal编程技术网

Bash Shell脚本-输出列格式

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

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_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