【问题标题】:Split file using reference in column使用列中的引用拆分文件
【发布时间】:2018-02-16 18:43:54
【问题描述】:

这样做的目的是使用第 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                        

根据上面的结果,我想将文件分成两部分,我之前提到应该考虑到第 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

文件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   

感谢您的帮助

【问题讨论】:

    标签: linux bash awk


    【解决方案1】:

    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
    

    【讨论】:

    • 完美运行。请你解释一下代码的部分 ++c:c 这是文件名的增量吗..
    • @user2734334, welcome, $6 &gt; 50? ++c:c 条件将为文件名定义一个后缀:它从1 开始并在遇到每个“间隙”时递增
    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2013-03-04
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多