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

时间:2016-05-03 01:47:08

标签: linux database bash flat-file

我有一个twitter id的平面文件数据库,这些数据库跟随daesh帐户,只有不到五十万行,看起来像这样:

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

2 个答案:

答案 0 :(得分:0)

使用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:]]+(.*)$/\2 \1/'

答案 1 :(得分:0)

这样的事情应该这样做。

$ 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

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

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

显示带有计数的前2个ID:

awk '{print $1 | "sort"}' *

如果你想要排序可以在awk中执行,即{{1}}。同样独特的也可以通过awk中的reg-ex来处理。但它确实有点复杂,上面会做的工作,可能更容易理解。