根据列差异将文本拆分为多个文件
Split text based on Column Difference Into Multiple Files
我有关于轨迹信息的数据,如下:
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 来拯救:
perl -aF'/,\s/' -ne 'open my $OUT, ">>", $F[1] or die $!;
print {$OUT} $_;' -- sorted-file
-n
逐行读取输入
-aF
在给定模式 /,\s/
上拆分每一行,即逗号 + space,并用结果 填充 @F 数组
>>
表示打开文件进行追加
sort -k1,2 file.txt | awk -F', *' '{print > ("out" )}'
如果您没有使用 GNU awk 并且您的文件有很多独特的“$2”值,那么您需要随时关闭文件,例如最简单的:
sort -k1,2 file.txt | awk -F', *' '{f="out" ; print >> f; close(f)}'
我有关于轨迹信息的数据,如下:
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 来拯救:
perl -aF'/,\s/' -ne 'open my $OUT, ">>", $F[1] or die $!;
print {$OUT} $_;' -- sorted-file
-n
逐行读取输入-aF
在给定模式/,\s/
上拆分每一行,即逗号 + space,并用结果 填充 @F 数组
>>
表示打开文件进行追加
sort -k1,2 file.txt | awk -F', *' '{print > ("out" )}'
如果您没有使用 GNU awk 并且您的文件有很多独特的“$2”值,那么您需要随时关闭文件,例如最简单的:
sort -k1,2 file.txt | awk -F', *' '{f="out" ; print >> f; close(f)}'