• 【shell】sed处理多行合并


    有这么一个题

    文件格式
    
    table=t1
    name
    owner
    address
    table=t2
    id
    text
    col1
    comment
    col5
    table=t3
    prod_name
    price
    
    要求按table=关键字,将相同的table的列放在同一行,结果为:
    
    table=t1 name owner address
    table=t2 id text col1 comment col5
    table=t3 prod_name price
    
    另外要求只能用sed

    这题我的的想法是先用xargs去掉所有的换行符,然后用sed把table替换成\ntable。

    可以题目中要求了只能用sed,所以本题的核心就是sed合并行。

    怎么用sed合并行,我用到了保持空间,步骤如下:

    1.如果是第一行,把模式空间替换到保持空间;

    2.如果不是第一行,把模式空间追加到保持空间;

    3.如果是最后一行,把保持空间的内容替换到模式空间;

    4.通过-n,只输出模式空间最后一行的内容;

    通过这四步,最后一行就变成了  table=t1 name owner address \n table=t2 id text col1 comment col5 \n table=t3 prod_name price,去掉\n 就完成了行的合并。

    参考代码如下:

    [root]$ cat sedMerge.txt
    table=t1
    name
    owner
    address
    table=t2
    id
    text
    col1
    comment
    col5
    table=t3
    prod_name
    price
    [root]$ cat sedMerge.txt | sed  -n '1h;1!H;$g;s/\n/ /g;s/table/\ntable/g;$p' | sed '/^$/d'
    table=t1 name owner address
    table=t2 id text col1 comment col5
    table=t3 prod_name price
  • 相关阅读:
    uva2965
    uva10755
    uva3695
    uva2678
    uva 11549
    stringstream使用笔记
    noip2016游记
    java学习(四)--- String 、StringBuffer、StringBuilder 和 数组
    java学习(三)--- 修饰符
    java学习(二)--- 变量类型
  • 原文地址:https://www.cnblogs.com/seyjs/p/5234953.html
Copyright © 2020-2023  润新知