[英]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.