如何删除空格但保留列结构?

时间:2018-03-30 16:46:07

标签: sed whitespace

我试图获取几行看起来像这样的数据:

green open  foundational-bus-layer-comm-ticket-details-f                MqWrI9I6Q7enZnLjH9xZHw 32 1  4488163       0  14.7gb   7.4gb
green open  foundational-cm-add-salesforce-customer-number-c            GA3dXwz3Rn2_EmZGV1oEfg 32 1   219696       0     1gb 520.3mb
      close foundational-sls-dtl-bpcs-otc-stg                           g2xS6fDRR0OW_W_24UjuYQ                                      
green open  foundational-cm-dw-customer-dim-hist-filtered               koNU-arFQHSFOEkmj_xc9w 32 1   141210       0 887.1mb   450mb
green open  datasync-dm-customer-vw-coalesce-a                          rvEuYU4NQ0SS69qB3UGLCA 32 1  2656210       0  11.6gb   5.8gb

并使用此sed命令删除多余的空格:sed's / \ s + / / g'

问题在于,我这样做了以下内容:

green open foundational-bus-layer-comm-ticket-details-f MqWrI9I6Q7enZnLjH9xZHw 32 1 4488163 0 14.7gb 7.4gb
green open foundational-bus-layer-comm-instrument-customer-f WF0wR4O3RxOZ2bzwm_yGRw 32 1 842214 0 1.5gb 808mb
 close foundational-sls-dtl-bpcs-otc-stg g2xS6fDRR0OW_W_24UjuYQ 
green open foundational-cm-add-salesforce-customer-number-c GA3dXwz3Rn2_EmZGV1oEfg 32 1 219696 0 1gb 520.3mb
green open foundational-cm-dw-customer-dim-hist-filtered koNU-arFQHSFOEkmj_xc9w 32 1 141210 0 887.1mb 450mb

我想要的是这样的东西:

green open  foundational-bus-layer-comm-ticket-details-f MqWrI9I6Q7enZnLjH9xZHw 32 1 4488163 0 14.7gb 7.4gb
green open  foundational-bus-layer-comm-instrument-customer-f WF0wR4O3RxOZ2bzwm_yGRw 32 1 842214 0 1.5gb 808mb
      close foundational-sls-dtl-bpcs-otc-stg g2xS6fDRR0OW_W_24UjuYQ 
green open  foundational-cm-add-salesforce-customer-number-c GA3dXwz3Rn2_EmZGV1oEfg 32 1 219696 0 1gb 520.3mb
green open  foundational-cm-dw-customer-dim-hist-filtered koNU-arFQHSFOEkmj_xc9w 32 1 141210 0 887.1mb 450mb

所以我想保留列结构,同时删除额外的空格。

任何想法??

********** EDIT ************ 我尝试了下面的建议,并得到以下内容:

green open  foundational-bus-layer-comm-contract-line-item-f 3987969 6.2gb
green open  foundational-idea-dlvry-lot-vldtd 0 4.2kb
green open  .trek-new 0 1.2kb
green open  add-pabbto-idaqowner-idaq-customerinformation-v9c2 948 3.4mb
 close      add-pabbto-idaowner-results-cc-v26 
green open  sym-tib-add-openorder-detail 261763 399.7mb
green open  idn 10417 8.2mb
green open  sym-adc-outboundinvoice-c 43012 46mb

那么......关闭?但“关闭”仍然需要移动......

1 个答案:

答案 0 :(得分:1)

你可以试试这个gnu sed

sed 's/  */ /3g;s/  */'$'\1''/2' infile | column -s $'\1' -t

解释:

s/  */ /3g

从第三次出现到结束,仅将一个或多个空格替换为一个 线的起点永远不会改变。

所以第一行

green open  foundational-bus-layer-comm-ticket-details-f                MqWrI9I6Q7enZnLjH9xZHw 32 1  4488163       0  14.7gb   7.4gb

成了

green open  foundational-bus-layer-comm-ticket-details-f MqWrI9I6Q7enZnLjH9xZHw 32 1 4488163 0 14.7gb 7.4gb

在-f

之后开始更改

有问题的一行

      close foundational-sls-dtl-bpcs-otc-stg                           g2xS6fDRR0OW_W_24UjuYQ                                      

成了

      close foundational-sls-dtl-bpcs-otc-stg g2xS6fDRR0OW_W_24UjuYQ 

更改在-stg

之后开始

s / * /'$'\ 1''/ 2

在第二次出现时用char Hex01替换1个或多个空格。

所以第一行成了

green openHex01foundational-bus-layer-comm-ticket-details-f MqWrI9I6Q7enZnLjH9xZHw 32 1 4488163 0 14.7gb 7.4gb

有问题的一行成了

      closeHex01foundational-sls-dtl-bpcs-otc-stg g2xS6fDRR0OW_W_24UjuYQ
column -s $'\1' -t

使用分隔符Hex01

格式化2 col中的输出

如果没有空格但是标签,则可以使用

sed 's/[[:blank:]][[:blank:]]*/ /3g;s/[[:blank:]][[:blank:]]*/'$'\1''/2' infile | column -s $'\1' -t