2012-03-01 129 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 

连接字段与:删除,'s。

或者将输出字段分隔符OFS更改为空。

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

或将OFS更改为“:”,只是“打印$ 1,$ 2” – 2012-03-01 14:47:49

5

解决方案已经给出,但没有完整的解释...

这是因为当你使用print许多参数(昏迷分隔)它把一个字段分隔符值之间。从awk人:

打印expr的列表

打印表达式。每个表达式由OFS变量的值分隔 。输出 记录以ORS 变量的值终止。

awk字符串连接运算符是不是昏迷,既不+,但空间str = str1 str2串连str1str2