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