拉取并列出平面文件数据库中最常见的 ID

Pull and list most common id inside a flat file database

我有一个 twitter id 的平面文件数据库,这些 id 正在关注 daesh 帐户,其中只有不到 50 万行,如下所示:

722030494578122752  | User Followes/followed pxayrxxcz

当我想搜索一个 id 时,我只是做了一个简单的 bash 脚本,看起来像这样。

grep -R $id | sort

这将调出我抓取的每个 Daesh 帐户,该 ID 跟随。我想创建另一个脚本,其开头看起来像这样。

cat * | sort | uniq | othercodehere > mostcommonids.txt

我想要做的是 运行 我的数据库文件上的这个脚本,并让它吐出它 运行 跨越的,比如说十个最常见的 ID。 ID 喜欢让它列出 ID 出现的次数,但我不知道这是否可能。

这是数据库的 8 行示例:

701719369605222400  | User Follows/followed 2ccdcccdcc
701719369605222400  | User Follows/followed omans_228
701719369605222400  | User Follows/followed Qs_7ii
721205276146343936  | User Follows/followed DDSSW890
712955245035331584  | User Follows/followed dxbdbd54
725779221335912452  | User Follows/followed GAREBSHAMI
713079851499040768  | User Follows/followed oobaida_793
713079851499040768  | User Follows/followed AbuH3

所以在这种情况下,701719369605222400(前三个 ID)是列表中最常见的 ID,而 713079851499040768(最后两个 ID)是列表中第二个最常见的 ID。我希望输出文件看起来像这样:

701719369605222400  3
713079851499040768  2

使用uniq -c:

sort file.txt | uniq -c

首先是最常见的 ID:

sort file.txt | uniq -c | sort -k1,1rn

最不常见的 ID 在前:

sort file.txt | uniq -c | sort -k1,1n

编辑:

做:

grep -o '^[^[:blank:]]\+'  file.txt | sort | uniq -c | sort -k1,1nr

获取前 2 个值:

grep -o '^[^[:blank:]]\+'  file.txt | sort | uniq -c | sort -k1,1nr | tail -2

要获得正确的格式:

grep -o '^[^[:blank:]]\+'  file.txt | sort | uniq -c | sort -k1,1nr | sed -r 's/^[[:blank:]]+([0-9]+)[[:blank:]]+(.*)$/ /'

应该这样做。

awk '{print }' * | sort | uniq -c | sort -nrk1,1 | head -n
-- where n = number of top IDs you want to view

示例输出: 我生成了一堆数据文件..

$ ls -la
total 44
drwxrwxr-x  2 adesilva adesilva 4096 May  2 22:16 .
drwxrwxrwt. 9 root     root     4096 May  2 22:07 ..
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data46
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data47
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data48
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data49
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data50
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data51
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data52
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data53
-rw-rw-r--  1 adesilva adesilva   54 May  2 22:16 data54

$ cat data46 # contents of one sample file. I did minor changes to 
             # simulate your scenario
722030494578122752 | User Followes/followed pxpyrxxcz

显示次数最多的 2 个 ID:

$ awk '{print }' * | sort | uniq -c | sort -nrk1,1 | head -2
      4 722030494578122752
      2 732030494578122752

如果你想排序可以在awk里面执行,即awk '{print | "sort"}' *。同样 unique 也可以由 awk 中的正则表达式处理。但它确实有点复杂,上面的内容可以完成工作并且可能更容易理解。