2015-02-16 2 views
1

У меня есть текстовый файл базы данных (csv-like), который содержит чрезмерные конечные и ведущие пробелы. Эти инциденты происходят только вокруг символа «|», который используется для разделения столбцов. Моя цель - удалить эти пробелы с помощью awk или sed. Я не могу заставить эту, казалось бы, простую задачу работать; возможно, потому что | является особым персонажем?Удаление конечных и ведущих пространств поля с использованием 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| 
+0

Вы просите СЭД или AWK, но тр должен быть использован. –

ответ

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> с | так другое пространство, не удаляются.

+0

Это работает безупречно; Спасибо! – user58602

0

Это позволит удалить все пространства с awk, заставляя awk пересчитать выходные данные, используя новое значение OFS, чтобы отделить поля (которые сначала были разделены на пробелы).

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

Чтобы удалить только "поле, отделяющее" пространства попробовать это:

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

использование sed как:

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

использование awk как

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

редактировать: использование gawk как

gawk '{print gensub(/ *(\|) */, "\\1","g")}' file 
Смежные вопросы