有这么一个题
文件格式 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