有這么一個題
文件格式 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