2015-04-14 22 views
1

我有一些列的数据,但有些数据混淆了我的列号使得bash操作混淆,下面的数据是我正在使用的(但有超过100万行)。我很感兴趣,在第8和第9列的数字:Bash列改变

2014-05-10 08:47:57.373 3600.633 UDP  114.31.255.90:57844 ->  42.209.2.47:52436 1.3 M 1.8 G  1 
2014-05-10 09:50:39.609 3601.385 UDP  114.31.255.90:57844 -> 60.120.101.149:47403 1.0 M 1.5 G  1 
2014-05-10 10:00:14.064 3607.106 UDP  114.31.255.90:57844 -> 46.83.205.250:32307 2.0 M 3.0 G  1 
2014-05-10 10:03:04.263 3644.192 UDP  114.31.255.90:57844 ->  1.32.33.64:10933 987743 1.4 G  1 
2014-05-10 11:07:16.247 546.764 TCP  105.51.244.36:80 -> 114.31.255.222:55580 797919 1.2 G  1 
2014-05-10 10:46:15.190 2332.334 UDP  114.31.255.90:57844 ->  43.95.27.215:53394 1.1 M 1.7 G  1 
2014-05-10 11:00:49.005 1458.456 UDP  114.31.255.90:57844 -> 39.150.172.138:39326 1.2 M 1.7 G  1 
2014-05-09 23:53:03.625 56.271 ICMP 61.114.116.140:3  -> 114.31.255.88:0.3   2  318  1 
2014-05-09 23:53:59.833  0.000 UDP  114.31.255.88:15360 -> 24.56.237.230:24752  1  131  1 
2014-05-09 23:53:59.835  0.000 UDP  114.31.255.88:15360 -> 154.115.89.25:28904  1  131  1 
2014-05-09 23:53:59.767  0.174 TCP  105.51.244.40:80 -> 114.31.255.41:28520  13  6675  1 
2014-05-09 23:53:59.409  0.000 UDP  114.31.255.70:53 -> 114.31.255.244:54604  1  536  1 
2014-05-09 23:53:59.621  0.333 TCP  105.51.244.40:80 -> 114.31.255.41:28519  16  7034  1 

我用TR,使数据处理由转动的所有空间更容易进入一个:

tr -s ' ' 

这使得使用(如下图)简单:

cut -f [column number(s)] -d ' ' 

然而,当一个值有G或M时,它会混淆colum编号。我想改变,例如:

2014-05-10 11:00:49.005 1458.456 UDP  114.31.255.90:57844 -> 39.150.172.138:39326 1.2 M 1.7 G 1 

2014-05-10 11:00:49.005 1458.456 UDP  114.31.255.90:57844 -> 39.150.172.138:39326 1.2M 1.7G 1 

我也尝试使用

tr ' G ' 'G ' 
tr ' M ' 'M ' 

[:空间:]在不同的配置,但是我还没有成功。

+0

'tr'上*单个字符操作*使这些类型的改变,你需要'sed'或'awk'或相似。 –

+0

不确定从哪里获得该数据,但可能可以将其输出为不可读的形式(不含'M'和'G' ...)?除了'M''G'问题,您可以使用'awk'{print $ 8 $ 9}'打印第8和第9列。 – damgad

+0

这是一个netflow输出,给我的,不是我生产的,我不幸地分析它! – user3770935

回答

0

tr不能像sed那样工作,因为它会按字符转换字符。使用sed这样的:

sed 's/ \([MG] \)/\1/g' 

说明:

/ \([MG] \)/ # match space followed by letter M or G and followed by another space. 
       # Also capture matched letter in matched group #1 
\1   # replace by back-reference #1 
+1

对所使用字符的解释可能有助于其他人的未来,但谢谢你,它完美的作品。 – user3770935