【问题标题】:Split text based on Column Difference Into Multiple Files根据列差异将文本拆分为多个文件
【发布时间】:2017-12-14 18:25:30
【问题描述】:

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

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

这是实现期望的一步。

我需要根据第二列将数据分成单独的文件 - 那该怎么做?我想需要某种类型的正则表达式。此外,第二列始终为数字,并且不包含负整数。

(第一列总是以 AL、EP 或 WP 开头)

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

【问题讨论】:

  • 什么意思?对于给定的示例,是否要使用各自的行创建文件 07081319
  • @choroba - 是的,或者关于这些行的任意文件名

标签: sorting awk sed cut


【解决方案1】:
sort -k1,2 file.txt | awk -F', *' '{print > ("out" $2)}'

如果您没有使用 GNU awk 并且您的文件有很多独特的“$2”值,那么您需要随时关闭文件,例如最简单的:

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

【讨论】:

    【解决方案2】:

    Perl 的救援:

    perl -aF'/,\s/' -ne 'open my $OUT, ">>", $F[1] or die $!;
                         print {$OUT} $_;' -- sorted-file
    
    • -n逐行读取输入
    • -aF 拆分给定模式 /,\s/ 上的每一行,即逗号 + 空格,并用结果填充 @F 数组
    • >> 表示打开文件进行追加

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多