zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    EXCEL启动慢
    存货跌价准备-资产减值损失
    绩效软件交流-ZQDJ
    库存股
    CF788A Functions again dp
    CF788C The Great Mixing BFS+思维
    CF788B Weird journey 欧拉路径+计数
    CF786C Till I Collapse 整体二分+根号分治
    CF922D Robot Vacuum Cleaner 贪心+排序
    CF920C Swap Adjacent Elements 贪心
  • 原文地址:https://www.cnblogs.com/seyjs/p/5234953.html
Copyright © 2011-2022 走看看