我试图获取几行看起来像这样的数据:
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
那么......关闭?但“关闭”仍然需要移动......
答案 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