Дополнительное пространство в выводе awk - PullRequest
5 голосов
/ 01 марта 2012

Почему я получаю пробел до и после разделителя в следующем примере?

awk -F'^'  '{print $1,":",$2}' SERVER_2012-02-29-12-15-00
3969 : 1272
3969 : 1272
3969 : 1272

Я ожидаю результаты, как показано ниже, без пробелов:

3969:1272
3969:1272
3969:1272

Текстовый файл выглядит так ...

cat SERVER_2012-02-29-12-15-00
3969^1272^14.140.90.242^^IN^como^2012-02-29
3969^1272^14.140.90.242^^IN^como^2012-02-29
3969^1272^14.140.90.242^^IN^como^2012-02-29

Ответы [ 2 ]

12 голосов
/ 01 марта 2012

Это может работать для вас:

awk -F'^'  '{print $1":"$2}' SERVER_2012-02-29-12-15-00
3969:1272
3969:1272
3969:1272

Чтобы объединить поля с помощью :, удалите ,.

Или измените разделитель выходных полей OFSв ноль.

awk -F'^' -vOFS='' '{print $1",:,"$2}' SERVER_2012-02-29-12-15-00
3969:1272
3969:1272
3969:1272
5 голосов
/ 01 марта 2012

Решения были даны, но без полного объяснения ...

Это потому, что когда вы используете print со многими параметрами (разделенными комой), он помещает Разделитель поля междуценности.Из awk man:

print expr-list

Печать выражений.Каждое выражение разделяется значением переменной OFS.Выходная запись заканчивается значением переменной ORS.

Оператор конкатенации строк в awk - это не кома, не +, а пробел : str = str1 str2 сцепление str1 и str2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...