使用 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|

这将删除带有 awk 的所有空格,方法是强制 awk 使用 OFS 的新值重新计算输出以分隔字段(开始时以空格分隔) ).

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

要仅删除 "field separating" 个空格,试试这个:

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

应该这样做:

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> 更改为 |,因此不会删除其他 space。

使用 sed 如:

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

使用awk喜欢

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

编辑: 使用 gawk 喜欢

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