【问题标题】:split block of records from a text file从文本文件中拆分记录块
【发布时间】:2018-09-14 16:59:37
【问题描述】:

大家好,我有如下制表符分隔文件

输入文件

6      12312321     123213 123321       
8      afddsf      askakf  asfds          
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl           
4      skjfs       akjsfk  kjdsafk        
9      asnfkjds    kjsdksd ksafnd           
7      12321321    124124 124124         
6      78787878    984929  29232       
8      afddsf      askakf  asfds           
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl          
4      skjfs       akjsfk  kjdsafk          
9      asnfkjds    kjsdksd ksafn           
7      78787878    233232  242214

预期输出 1:file1.txt - 根据第一列中的 6 和 7 值拆分第一组

6      12312321     123213 123321       
8      afddsf      askakf  asfds          
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl           
4      skjfs       akjsfk  kjdsafk        
9      asnfkjds    kjsdksd ksafnd           
7      12321321    124124 124124  

预期输出 2:file2.txt

6      78787878    984929  29232       
8      afddsf      askakf  asfds           
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl          
4      skjfs       akjsfk  kjdsafk          
9      asnfkjds    kjsdksd ksafn           
7      78787878    233232  242214

预期输出 3:file3.txt - 根据第一列中的 8 和 9 值拆分

8      afddsf      askakf  asfds          
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl           
4      skjfs       akjsfk  kjdsafk        
9      asnfkjds    kjsdksd ksafnd  

预期输出 4:file4.txt

8      afddsf      askakf  asfds           
4      fsdaofs     safjsdf kasdbfksdj        
4      safndsj     skfkds  sfsjl          
4      skjfs       akjsfk  kjdsafk          
9      asnfkjds    kjsdksd ksafn 

【问题讨论】:

  • 那么,问题是什么?
  • 想要将输入文件拆分为记录块,如预期输出所示。希望它清楚.. :-)
  • want to split the input file into block of record as shown in the expected output. 是一个陈述,而不是一个问题。您应该展示到目前为止您已经尝试过的内容,并就导致您出现问题的问题的某些方面寻求帮助。见How to Ask

标签: linux file text awk split


【解决方案1】:

这个问题很复杂,因为在我们处理完整个文件之前,我们不知道如何创建具有正确索引的文件名。

#! /usr/bin/awk -f

BEGIN {
    FS = "\t"
    split("", b67)
    split("", b89)
    i67 = i89 = 0
}

 (i67 in b67)            { b67[i67] = b67[i67] ORS $0 }
 (i67 in b67) && $1 == 7 { ++i67 }
!(i67 in b67) && $1 == 6 { b67[i67] = $0 }

 (i89 in b89)            { b89[i89] = b89[i89] ORS $0 }
 (i89 in b89) && $1 == 9 { ++i89 }
!(i89 in b89) && $1 == 8 { b89[i89] = $0 }

END {
    f = 0
    for (i = 0; i < i67; ++i)
        print b67[i] > "file" ++f ".txt"
    for (i = 0; i < i89; ++i)
        print b89[i] > "file" ++f ".txt"
}

in 周围的 () 模式不是必需的,但被放置是为了增加清晰度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多