拉取并列出平面文件数据库中最常见的 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 中的正则表达式处理。但它确实有点复杂,上面的内容可以完成工作并且可能更容易理解。
我有一个 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 中的正则表达式处理。但它确实有点复杂,上面的内容可以完成工作并且可能更容易理解。