如何使用shell脚本将行转换为列或一些漂亮的表

时间:2018-08-17 10:33:52

标签: bash shell unix

我从stack overflow中获得了以下脚本:

#!/bin/sh

in_file=temp2.txt   # Input file
params=6            # Parameters count
res_file=$(mktemp)  # Temporary file
sep=' '             # Separator character

# Print header
cnt=0
for i in $(cat $in_file | head -$((params*2))); do
    if [ $((cnt % 2)) -eq 0 ]; then
        echo $i
    fi
    cnt=$((cnt+1))
done | sed ":a;N;\$!ba;s/\n/$sep/g" >>$res_file

# Parse and print values
cnt=0
for i in $(cat $in_file); do
    # Print values, skip param names
    if [ $((cnt % 2)) -eq 1 ]; then
        echo -n $i >>$res_file
    fi

    if [ $(((cnt+1) % (params*2))) -eq 0 ]; then
        # Values line is finished, print newline
        echo >>$res_file
    elif [ $((cnt % 2)) -eq 1 ]; then
        # More values expected to be printed on this line
        echo -n "$sep" >>$res_file
    fi

    cnt=$((cnt+1))
done

# Make nice table format
cat $res_file | column -t
#rm -f $res_file

但是随后我大约有100多行,并且出现错误**“列:行太长” **,如下所示:

  

****列:行太长**** GigabitEthernet0 / 0 GigabitEthernet1 / 0/3 GigabitEthernet1 / 0/5 GigabitEthernet1 / 0/10   GigabitEthernet1 / 0/19 GigabitEthernet1 / 0/33 GigabitEthernet1 / 0/2
  千兆以太网1/0/4千兆以太网1/0/7千兆以太网1/0/18   千兆以太网1/0/30千兆以太网1/0/44千兆以太网1/0/46   GigabitEthernet1 / 1/3 GigabitEthernet2 / 0/1 GigabitEthernet2 / 0/5
  千兆以太网2/0/9千兆以太网2/0/14千兆以太网2/0/18   GigabitEthernet2 / 0/31 GigabitEthernet2 / 0/34 GigabitEthernet2 / 0/36   千兆以太网2/0/40千兆以太网2/1/3千兆以太网3/0/12   GigabitEthernet3 / 0/30 GigabitEthernet3 / 0/32 GigabitEthernet3 / 0/34   GigabitEthernet3 / 0/36 GigabitEthernet3 / 0/38 GigabitEthernet3 / 0/40   GigabitEthernet3 / 0/42 GigabitEthernet3 / 0/44 GigabitEthernet3 / 0/46   GigabitEthernet3 / 0/48 GigabitEthernet3 / 1/2

您可以提供的任何解决方案,在这里我都找不到这个脚本的作者再次询问他。

输入文件将如下所示:

{ 千兆以太网0/0 千兆以太网1/0/2 千兆以太网1/0/3 千兆以太网1/0/4 千兆以太网1/0/5 千兆以太网1/0/7 千兆以太网1/0/10 千兆以太网1/0/18 千兆以太网1/0/19 千兆以太网1/0/30 千兆以太网1/0/33 千兆以太网1/0/44 千兆以太网1/0/45 千兆以太网1/0/46 千兆以太网1/1/2 千兆以太网1/1/3 千兆以太网1/1/4 千兆以太网2/0/1 千兆以太网2/0/2 千兆以太网2/0/5 千兆以太网2/0/8 千兆以太网2/0/9 千兆以太网2/0/12 千兆以太网2/0/14 千兆以太网2/0/15 千兆以太网2/0/18 千兆以太网2/0/22 千兆以太网2/0/31 千兆以太网2/0/33 千兆以太网2/0/34 千兆以太网2/0/35 千兆以太网2/0/36 千兆以太网2/0/38 千兆以太网2/0/40 千兆以太网2/1/2 千兆以太网2/1/3 千兆以太网2/1/4 千兆以太网3/0/12 千兆以太网3/0/23 千兆以太网3/0/30 千兆以太网3/0/31 千兆以太网3/0/32 千兆以太网3/0/33 千兆以太网3/0/34 千兆以太网3/0/35 千兆以太网3/0/36 千兆以太网3/0/37 千兆以太网3/0/38 千兆以太网3/0/39 千兆以太网3/0/40 千兆以太网3/0/41 千兆以太网3/0/42 千兆以太网3/0/43 千兆以太网3/0/44 千兆以太网3/0/45 千兆以太网3/0/46 千兆以太网3/0/47 千兆以太网3/0/48 千兆以太网3/1/1 千兆以太网3/1/2 千兆以太网3/1/3 千兆以太网3/1/4 }

输出我需要这样的东西:

{ 千兆以太网0/0 |千兆以太网1/0/33 | 千兆以太网1/0/2 |千兆以太网1/0/44 | 千兆以太网1/0/3 |千兆以太网1/0/43 | 千兆以太网1/0/4 |千兆以太网1/0/46 | GigabitEthernet1 / 0/5 |千兆以太网1/1/2 | 千兆以太网1/0/7 |千兆以太网1/1/3 | 千兆以太网1/0/10 |千兆以太网1/1/4 | 千兆以太网1/0/18 |千兆以太网2/0/1 | 千兆以太网1/0/19 |千兆以太网2/0/2 | 千兆以太网1/0/30 | GigabitEthernet2 / 0/5 | }

1 个答案:

答案 0 :(得分:0)

我已经使用列命令解决了这个问题。

它只是将输出发布如下

column vacant_temp4.txt GigabitEthernet1/0/1 GigabitEthernet1/0/48 GigabitEthernet2/0/34 GigabitEthernet3/0/44 GigabitEthernet4/0/28 GigabitEthernet1/0/2 GigabitEthernet1/1/2 GigabitEthernet2/0/35 GigabitEthernet3/1/1 GigabitEthernet4/0/29 GigabitEthernet1/0/3 GigabitEthernet1/1/3 GigabitEthernet2/0/36 GigabitEthernet3/1/2 GigabitEthernet4/0/30 GigabitEthernet1/0/5 GigabitEthernet1/1/4 GigabitEthernet2/0/38 GigabitEthernet3/1/3 GigabitEthernet4/0/31 GigabitEthernet1/0/7 GigabitEthernet2/0/1 GigabitEthernet2/0/45 GigabitEthernet3/1/4 GigabitEthernet4/0/32 GigabitEthernet1/0/8 GigabitEthernet2/0/5 GigabitEthernet2/1/2 GigabitEthernet4/0/1 GigabitEthernet4/0/33 GigabitEthernet1/0/9 GigabitEthernet2/0/8 GigabitEthernet2/1/3 GigabitEthernet4/0/5 GigabitEthernet4/0/34 GigabitEthernet1/0/14 GigabitEthernet2/0/9 GigabitEthernet2/1/4 GigabitEthernet4/0/6 GigabitEthernet4/0/35 GigabitEthernet1/0/16 GigabitEthernet2/0/10 GigabitEthernet3/0/2 GigabitEthernet4/0/9 GigabitEthernet4/0/36 GigabitEthernet1/0/19 GigabitEthernet2/0/13 GigabitEthernet3/0/5 GigabitEthernet4/0/12 GigabitEthernet4/0/37 GigabitEthernet1/0/20 GigabitEthernet2/0/14 GigabitEthernet3/0/7 GigabitEthernet4/0/13 GigabitEthernet4/0/38 GigabitEthernet1/0/26 GigabitEthernet2/0/16 GigabitEthernet3/0/13 GigabitEthernet4/0/16 GigabitEthernet4/0/39 GigabitEthernet1/0/27 GigabitEthernet2/0/20 GigabitEthernet3/0/16 GigabitEthernet4/0/17 GigabitEthernet4/0/40 GigabitEthernet1/0/28 GigabitEthernet2/0/21 GigabitEthernet3/0/19 GigabitEthernet4/0/18 GigabitEthernet4/0/41 GigabitEthernet1/0/30 GigabitEthernet2/0/25 GigabitEthernet3/0/22 GigabitEthernet4/0/19 GigabitEthernet4/0/42 GigabitEthernet1/0/31 GigabitEthernet2/0/26 GigabitEthernet3/0/25 GigabitEthernet4/0/20 GigabitEthernet4/1/1 GigabitEthernet1/0/35 GigabitEthernet2/0/27 GigabitEthernet3/0/26 GigabitEthernet4/0/21 GigabitEthernet4/1/2 GigabitEthernet1/0/36 GigabitEthernet2/0/28 GigabitEthernet3/0/27 GigabitEthernet4/0/22 GigabitEthernet4/1/3 GigabitEthernet1/0/37 GigabitEthernet2/0/29 GigabitEthernet3/0/37 GigabitEthernet4/0/23 GigabitEthernet4/1/4 GigabitEthernet1/0/40 GigabitEthernet2/0/30 GigabitEthernet3/0/39 GigabitEthernet4/0/24 GigabitEthernet1/0/45 GigabitEthernet2/0/31 GigabitEthernet3/0/41 GigabitEthernet4/0/26 GigabitEthernet1/0/46 GigabitEthernet2/0/32 GigabitEthernet3/0/42 GigabitEthernet4/0/27 它看起来比您在我的腻子屏幕上看到的要好。

谢谢oliv,Tripleee,paul和所有人。