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

时间:2015-02-16 19:03:03

标签: regex awk sed

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

输入.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|

3 个答案:

答案 0 :(得分:4)

这应该做:

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>更改任何|,因此不会删除其他空格。

答案 1 :(得分:0)

这会删除awk的所有空格,强制awk使用OFS的新值重新计算输出,以分隔字段(在空白处开始分割)。

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

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

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

答案 2 :(得分:0)

使用sed之类的:

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

使用awk之类的

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

编辑: 使用gawk喜欢

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