代码之家  ›  专栏  ›  技术社区  ›  user3026339

基于列差异将文本拆分为多个文件

  •  0
  • user3026339  · 技术社区  · 9 年前

    我有以下关于轨迹信息的数据:

    EP, 13, 2017071012, 03, AP01, 126, 27.1, -130, 17, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    AL, 07, 2017071012, 03, AP01, 132, 27, -131.1, 18, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    WP, 19, 2017071012, 03, AP01, 000, 18.5, -116.8, 56, 982, XX, 50, NEQ, 0057, 0047, 0034, 0036
    AL, 08, 2017071012, 03, AP01, 132, 27, -132.1, 17, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    

    信息需要按第一列(名称)和第二列(数字标识符)排序。

    sort -k1,2 file.txt
    

    AL, 07, 2017071012, 03, AP01, 132, 27, -131.1, 18, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    AL, 08, 2017071012, 03, AP01, 132, 27, -132.1, 17, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    EP, 13, 2017071012, 03, AP01, 126, 27.1, -130, 17, 1018, XX, 34, NEQ, 0000, 0000, 0000, 0000
    WP, 19, 2017071012, 03, AP01, 000, 18.5, -116.8, 56, 982, XX, 50, NEQ, 0057, 0047, 0034, 0036
    

    我需要根据第二列将数据分离到单独的文件中-这将如何实现?我想需要某种类型的正则表达式。此外,第二列始终是数值列,不包含负整数。

    提前感谢您的信息和帮助!

    2 回复  |  直到 9 年前
        1
  •  0
  •   Ed Morton    9 年前
    sort -k1,2 file.txt | awk -F', *' '{print > ("out" $2)}'
    

    sort -k1,2 file.txt | awk -F', *' '{f="out" $2; print >> f; close(f)}'
    
        2
  •  0
  •   choroba    9 年前

    Perl救援:

    perl -aF'/,\s/' -ne 'open my $OUT, ">>", $F[1] or die $!;
                         print {$OUT} $_;' -- sorted-file
    
    • -n 逐行读取输入
    • -aF /,\s/ ,即逗号+空格,并用结果填充@F数组
    • >>