linux - 如何从文件中获取唯一事件?

标签 linux perl bash sed awk

我在尝试从格式类似于以下内容的日志文件中获取唯一出现的 DeviceId 时遇到一些问题:

log: {"deviceInfo":{"DeviceId":"123","device":"Android"}
log: {"deviceInfo":{"device":"Android","DeviceId":"123"}
log: {"deviceInfo":{"device":"Android","DeviceId":"234"}
log: {"deviceInfo":{"device":"iPhone","DeviceId":"323"}
log: {"deviceInfo":{"device":"iPhone","DeviceId":"323"}

我期待的是这样的输出:

log: {"deviceInfo":{"DeviceId":"123","device":"Android"}
log: {"deviceInfo":{"device":"Android","DeviceId":"234"}
log: {"deviceInfo":{"device":"iPhone","DeviceId":"323"}

我尝试使用 awk 但我似乎可以弄明白。有谁知道如何做到这一点?

我知道应该有一种方法可以使用 awk 打印 DeviceId,但我似乎无法弄清楚。一旦获得 DeviceId,我就可以通过管道传输到 sortuniq

最佳答案

使用 Perl:

perl -lne 'if ( m{"DeviceId":" ([^"]+) "}xms ) { print if not $seen{$1}++; }' <log

关于linux - 如何从文件中获取唯一事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073146/

相关文章:

git - 创建远程分支的最简单方法

linux - "#exec cgi"命令在 html 中被忽略;相同的脚本作为 "form post"命令运行

php - 在 RHEL 6 上编译 `mysql_pdo` 驱动程序(无法访问互联网,没有 `yum install` )

linux - 如何在 bash 脚本中使用 for 循环复制和重命名文件?

mysql - 从 MySQL 数据库解析 DateTime

linux - 每当在 linux 中使用 inode 创建新文件时,如何获取文件名以及文件的绝对路径?

sql-server - 我可以从 Linux 转储整个 Microsoft SQL Server 数据库吗?

perl - Perl的(或和)和(||,&&)短路运算符有什么区别?

python - 在Python中捕获警告并在捕获时运行bash脚本?

bash - 使用 mkfifo 和传输流,这可能吗?