我有一个包含过多尾随和前导空格的数据库文本文件(类似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|
答案 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