使用

时间:2018-02-16 07:36:48

标签: linux bash awk

这样做的目的是使用第5列作为参考来分割以下文件

336843.75 2395106.25 36289 38580 660                          
336843.75 2395118.75 36290 38580 660                          
336843.75 2395131.25 36291 38580 661                          
336843.75 2395143.75 36292 38580 662                          
336843.75 2395156.25 36293 38580 662                          
336843.75 2395168.75 36294 38580 663                          
336843.75 2495381.25 44311 38580 665                          
336843.75 2495393.75 44312 38580 760                          
336843.75 2495406.25 44313 38580 761                          
336843.75 2495418.75 44314 38580 762                          
336843.75 2495431.25 44315 38580 764                          
336843.75 2495443.75 44316 38580 765                          
336993.75 2394956.25 36277 38592 765                          
336993.75 2394968.75 36278 38592 766                          
336993.75 2394981.25 36279 38592 770                          

使用此代码,我已减去第5列中的行,以确定何时存在间隙> 50.第6栏的结果

awk '{$6=$5-prev5} {prev5=$5; print}' file    

336843.75 2395106.25 36289 38580 660 660                      
336843.75 2395118.75 36290 38580 660 0                        
336843.75 2395131.25 36291 38580 661 1                        
336843.75 2395143.75 36292 38580 662 1                        
336843.75 2395156.25 36293 38580 662 0                        
336843.75 2395168.75 36294 38580 663 1                        
336843.75 2495381.25 44311 38580 665 2                        
336843.75 2495393.75 44312 38580 760 95                       
336843.75 2495406.25 44313 38580 761 1                        
336843.75 2495418.75 44314 38580 762 1                        
336843.75 2495431.25 44315 38580 764 2                        
336843.75 2495443.75 44316 38580 765 1                        
336993.75 2394956.25 36277 38592 765 0                        
336993.75 2394968.75 36278 38592 766 1                        
336993.75 2394981.25 36279 38592 770 4                        

以上结果我想将文件拆分为2部分,我之前提到应该考虑差距>第6列中的50用于拆分文件。

我可以使用选项

awk '{print> substr($5,1,1)}' file

但它总是不起作用。

输出所需的2个文件

文件1:

336843.75 2395106.25 36289 38580 660 660                      
336843.75 2395118.75 36290 38580 660 0                        
336843.75 2395131.25 36291 38580 661 1                        
336843.75 2395143.75 36292 38580 662 1                        
336843.75 2395156.25 36293 38580 662 0                        
336843.75 2395168.75 36294 38580 663 1                        
336843.75 2495381.25 44311 38580 665 2

file2的:

336843.75 2495393.75 44312 38580 760 95
336843.75 2495406.25 44313 38580 761 1
336843.75 2495418.75 44314 38580 762 1
336843.75 2495431.25 44315 38580 764 2
336843.75 2495443.75 44316 38580 765 1                        
336993.75 2394956.25 36277 38592 765 0                        
336993.75 2394968.75 36278 38592 766 1                        
336993.75 2394981.25 36279 38592 770 4   

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

Awk 解决方案:

awk 'BEGIN{ c=1 }{ $6=$5-prev }{ prev=$5 }{ print > "file"(NR>1 && $6 > 50? ++c:c) }' file

结果:

$ head file[12]
==> file1 <==
336843.75 2395106.25 36289 38580 660 660
336843.75 2395118.75 36290 38580 660 0
336843.75 2395131.25 36291 38580 661 1
336843.75 2395143.75 36292 38580 662 1
336843.75 2395156.25 36293 38580 662 0
336843.75 2395168.75 36294 38580 663 1
336843.75 2495381.25 44311 38580 665 2

==> file2 <==
336843.75 2495393.75 44312 38580 760 95
336843.75 2495406.25 44313 38580 761 1
336843.75 2495418.75 44314 38580 762 1
336843.75 2495431.25 44315 38580 764 2
336843.75 2495443.75 44316 38580 765 1
336993.75 2394956.25 36277 38592 765 0
336993.75 2394968.75 36278 38592 766 1
336993.75 2394981.25 36279 38592 770 4