代码之家  ›  专栏  ›  技术社区  ›  Yashas K.M

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

  •  0
  • Yashas K.M  · 技术社区  · 6 年前

    我从你那里得到了以下脚本 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多行,我得到一个错误**“column:line To long”**如下:

    ****列:行太长****千兆以太网0/0千兆以太网1/0/3千兆以太网1/0/5千兆以太网1/0/10 千兆以太网1/0/19千兆以太网1/0/33千兆以太网1/0/2
    千兆以太网1/0/4千兆以太网1/0/7千兆以太网1/0/18 千兆以太网1/0/30千兆以太网1/0/44千兆以太网1/0/46 千兆以太网1/1/3千兆以太网2/0/1千兆以太网2/0/5
    千兆以太网2/0/9千兆以太网2/0/14千兆以太网2/0/18 千兆以太网2/0/31千兆以太网2/0/34千兆以太网2/0/36 千兆以太网2/0/40千兆以太网2/1/3千兆以太网3/0/12 千兆以太网3/0/30千兆以太网3/0/32千兆以太网3/0/34 千兆以太网3/0/36千兆以太网3/0/38千兆以太网3/0/40 千兆以太网3/0/42千兆以太网3/0/44千兆以太网3/0/46 千兆以太网3/0/48千兆以太网3/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/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| 千兆以太网1/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 |千兆以太网2/0/5| }

    1 回复  |  直到 6 年前
        1
  •  0
  •   Yashas K.M    6 年前

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

    它只是发布了类似这样的输出

    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 它看起来比你在我的油灰屏幕上看到的要好。

    谢谢奥利夫、特里皮、保罗和;全部的