linux - unix - 文件中有多少条记录以及字符出现次数的分割

标签 linux perl bash shell unix

是否有内置命令可以执行此操作,或者是否有人幸运地使用了执行此操作的脚本?

我想知道有多少记录(由特定 EOL 定义,例如“^%!”)有多少特定字符出现。 (按出现次数降序排列)

例如,对于这个示例文件:

jdk,|ljn^%!dk,|sn,|fgc^%!
ydfsvuyx^%!67ds5,|bvujhy,|s6d75
djh,|sudh^%!nhjf,|^%!fdiu^%!

建议输入:分隔符 EOL 和文件名作为参数。

bash/perl some_script_name ",|" "^%!" samplefile

期望的输出:

occs    count
3        1
2        1
1        2
0        2

这是因为第 1 条记录有一个分隔符,第 2 条记录有 2,第 3 条记录有 0,第 4 条记录有 3,第 5 条记录有 1,第 6 条记录有 0。

如果您能让定界符和 EOL 参数接受十六进制输入(即 2C7C)或普通字符输入(即 ,|),则加分。

最佳答案

脚本:

#!/usr/bin/perl
use strict;

$/ = $ARGV[1];
open my $fh, '<', $ARGV[2] or die $!;
my @records = <$fh> and close $fh;

$/ = $ARGV[0];
my %counts;
$counts{(split $_)-1}++ for @records;
delete $counts{-1};

print "$_\t$counts{$_}\n" for (reverse sort keys %counts);

测试:

perl script.pl ',|' '^%!' samplefile 

输出:

3   1
2   1
1   2
0   2

关于linux - unix - 文件中有多少条记录以及字符出现次数的分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159207/

相关文章:

c - 如何在C用户程序中使用linux库函数?

perl - Marpa 的错误标记化

linux - 根据列的值保留唯一 ID?

bash - Git 自动补全行为异常

Linux vi 中的 C 编程

python - 如何显示正在运行的进程列表 Python?

mysql - 使用用户输入在 .SQL 查询文件中搜索和替换的 Perl 脚本

perl - 我如何使用 Perl 在 AGI 中转发当前的 Asterisk 调用?

regex - Linux CLI 更改价格(awk 还是 sed?)

我可以使用一个进程中的 PTE 来指示物理内存片段以在其他进程中创建适当的 PTE 吗?