空行

时间:2018-03-28 07:32:13

标签: linux bash shell awk sed

萨拉姆 以下是所需的输出:

    RXOTG-136        VENEN6               0
                     VENEN6               1
                     VENEN7               0
                     VENEN7               1
    RXOTG-137        TIVIK6               0
                     TIVIK6               1
    RXOTG-138        KESTA1               0
                     KESTA1               1
                     KESTA2               0
                     KESTA2               1
                     KESTA3               0
                     KESTA3               1
    RXOTG-139        KESTA4               0
                     KESTA4               1
    

我使用了以下命令

    awk 'NF==1{a=$1; next}{ print val}'

但我得到的输出是

    RXOTG-136        VENEN6               0  
    RXOTG-136        VENEN6               1  
    RXOTG-136        VENEN7               0  
    RXOTG-136        VENEN7               1  
    RXOTG-137        TIVIK6               0  
    RXOTG-137        TIVIK6               1  
    RXOTG-138        KESTA1               0  
    RXOTG-138        KESTA1               1  
    RXOTG-138        KESTA2               0  
    RXOTG-138        KESTA2               1  
    RXOTG-138        KESTA3               0  
    RXOTG-138        KESTA3               1  
    RXOTG-139        KESTA4               0  
    RXOTG-139        KESTA4               1  

3 个答案:

答案 0 :(得分:2)

 awk 'NF==3{a=$1} NF==2{$1=a OFS $1} 1' file
  • 您需要将第一个字段存储在某个地方
  • 1用于打印每一行
  • 由于重新分配$ 1~ $ 3,格式会发生变化,因此您可以使用column -t格式化

    awk 'NF==3{a=$1} NF==2{$1=a OFS $1} 1' file | column -t

答案 1 :(得分:0)

关注简单awk可能对您有所帮助。

awk '!/^ /{val=$1} /^ /{$1=val OFS $1} 1'  Input_file | column -t

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r '1h;1b;s/^/\n/;G;:a;/\n\s(.*\n)(.)(.*\S+\s+\S+$)/s//\2\n\1\3/;ta;s/\n//;s/\n.*//;h' file

在保留空间中复制后打印第一行。对于所有后续行,添加换行符并追加上一行。将一个字符从前一行复制到当前行的前面,直到当前行的前面没有空格或前一行中只有两个字段。删除第一个引入的换行符并删除上一行的剩余部分。将当前行复制到保留空间,准备下次并打印当前行。