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

Sorting 基于列差异将文本拆分为多个文件,sorting,awk,sed,cut,Sorting,Awk,Sed,Cut,我有以下关于轨迹信息的数据: 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,

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

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
信息需要按第1列(名称)和第2列(数字标识符)排序

运行

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开头)

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

救援人员:

perl -aF'/,\s/' -ne 'open my $OUT, ">>", $F[1] or die $!;
                     print {$OUT} $_;' -- sorted-file
  • -n
    逐行读取输入
  • -aF
    将给定模式
    /,\s/
    上的每一行拆分,即逗号+空格,并用结果填充@F数组
  • >
    表示打开该文件进行附加
如果您不使用GNU awk,并且您的文件具有许多唯一的“$2”值,则您需要在运行时关闭这些文件,例如,最简单的情况是:

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

什么意思?对于给定的示例,是否要使用相应的行创建文件
07
08
13
、和
19
?@choroba-是,或针对这些行创建任意文件名
sort -k1,2 file.txt | awk -F', *' '{f="out" $2; print >> f; close(f)}'