2016-07-19 133 views
1

使用awk在最后一列之后的文本文件中创建新列数据。我的最后一栏大多是IP地址,但可能会有一些文本行,看起来像这样:AWK:新列未正确对齐

192.168.50.25 
192.168.111.145 
Unknown 

我使用创建新列的命令是:

grep '102548' file | awk -v OFS='\t' '{print $0, "2018-10-22"}' 

我grepping为102548原因我只想让awk在包含该字符串的行上工作。下面是从命令我的输出:

192.168.50.25 2018-10-22 
192.168.111.145   2018-10-22 
Unknown   2018-10-22 
172.16.15.145   2018-10-22 

这似乎是没有无缘无故就什么左边列,但新列的布局,虽然未对齐,随机,始终以这种格式

2018-10-22 
      2018-10-22 
      2018-10-22 
    2018-10-22 
      2018-10-22 

所以看起来“重叠”总是相同的。我怎样才能构建我的命令,这样我总能得到这种分离?

192.168.50.25  2018-10-22 
192.168.111.145  2018-10-22 
Unknown    2018-10-22 
172.16.15.145  2018-10-22 

回答

1

您的第一列中的某些行上的文本延伸过第一个tabstop,而在其他行中则不是。

如果你想要的东西在视觉上很好的方式一字排开,尝试column -t

$ awk '{print $0, "2018-10-22"}' file | column -t 
192.168.50.25 2018-10-22 
192.168.111.145 2018-10-22 
Unknown   2018-10-22 

以上线了基于任何空白列。如果您只希望制表符分隔列(意思是列可以包含空格),请尝试:

$ awk '{print $0, "2018-10-22"}' OFS='\t' file | column -s$'\t' -t 
192.168.50.25 2018-10-22 
192.168.111.145 2018-10-22 
Unknown   2018-10-22 
+1

啊!列是它!尽管我不得不追加“column -s $'\ t'-t”来获得我需要的确切格式。 – user53029