繁体   English   中英

使用AWK或SED删除字段的尾部和前导空格

[英]Removing trailing and leading spaces of a field using AWK or SED

我有一个数据库文本文件(类似csv),其中包含过多的结尾和前导空格。 这些事件仅在用于分隔列的字符“ |”周围发生。 我的目标是使用awk或sed删除这些空间。 我无法完成这项看似简单的任务; 是因为| 是一个特殊字符?

Input.txt

| |COL1 |COL2  |COL3      |COL4 |COL11|COL99|COL19     |COL88     |CAL9            |COL84           |COL98           | 
| |500  |0001  |0100000000|1995 |001  |     |Test  This|00.00.0000|           6,14 |          12,00 |           0,00 | 
| |500  |0001  |0100000000|1995 |002  |     |Separ ated|00.00.0000|          18,14 |          12,00 |           0,00 | 

Output.txt

||COL1|COL2|COL3|COL4|COL11|COL99|COL19|COL88|COL9|COL84|COL98|
||500|0001|0100000000|1995|001||Test  This|00.00.0000|6,14|12,00|0,00|
||500|0001|0100000000|1995|001||Separ ated|00.00.0000|18,14|12,00|0,00|

应该这样做:

sed 's/ *| */|/g' file
||COL1|COL2|COL3|COL4|COL11|COL99|COL19|COL88|CAL9|COL84|COL98|
||500|0001|0100000000|1995|001||Test  This|00.00.0000|6,14|12,00|0,00|
||500|0001|0100000000|1995|002||Separ ated|00.00.0000|18,14|12,00|0,00|

它用|更改任何<space>|<space> 因此不会删除其他空间。

这将通过使用新的OFS值强制awk重新计算输出以分隔字段(以空格分隔的字段)来强制删除awk中的所有空格。

awk -v OFS='' '{$1=$1; print}' in.csv

要仅删除“字段分隔”空间,请尝试以下操作:

awk -F '[[:space:]]*\\|[[:space:]]*' -v OFS='|' '{$1=$1; print}' in.csv

像这样使用sed

   sed 's/ *\(|\) */\1/g' file 

像这样使用awk

awk '{gsub(/ *\| */, "|");print}' file

编辑:使用gawk喜欢

gawk '{print gensub(/ *(\|) */, "\\1","g")}' file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM