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
  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/seyjs/p/5234953.html
Copyright © 2011-2022 走看看