2012-03-01 3 views
4

Почему я получаю пробел до и после разделителя в следующем примере?Дополнительное пространство в awk-выходе

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 

ответ

10

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

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

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

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

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

Или измените OFS на ":" и просто 'print $ 1, $ 2' –

5

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

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

печать выраж-лист

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

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