我有一个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
答案 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来处理。但它确实有点复杂,上面会做的工作,可能更容易理解。