2016-05-03 3 views
2

J'ai une base de données de fichier plat de ids twitter qui suivent des comptes daesh avec un peu moins d'un demi-million de lignes qui ressemble à ceci:Pull et liste identifiant le plus courant dans une base de données fichier plat

722030494578122752 | User Followes/followed pxayrxxcz 

Quand je veux Pour rechercher un identifiant, je fais juste un simple script bash qui ressemble à ceci.

grep -R $id | sort 

et cela va remonter chaque compte daesh j'ai gratté que cet id suit. Je voudrais créer un autre script, dont le début ressemblerait à ceci.

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

Ce que je veux faire est de lancer ce script sur mes fichiers de base de données et ont cracher les, disons dix ids, les plus courants qu'il traverse. Je voudrais l'énumérer combien de fois l'identifiant est rencontré mais je ne sais pas si c'est possible.

Voici 8 ligne exemple de la base de données:

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 

Donc dans ce cas 701719369605222400 (les trois premiers ids) est l'identifiant le plus courant dans la liste, et 713079851499040768 (les deux derniers ids) est le deuxième identifiant le plus commun dans la liste. Id comme le fichier de sortie pour ressembler à ceci:

701719369605222400 3 
713079851499040768 2 

Répondre

0

Utilisation uniq -c:

sort file.txt | uniq -c 

ID les plus courants premier:

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

moins ID communs premiers:

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

Edit:

Do:

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

Pour obtenir les 2 premières valeurs:

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

Pour obtenir la mise en forme correcte:

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

Tout est sur la même ligne donc cela ne fonctionnerait pas, il dit que tous les identifiants sont répertoriés une seule fois parce que l'utilisateur qu'ils suivent est sur la même ligne que l'ID de l'utilisateur. – Matt

+0

@Matt S'il vous plaît modifier votre question pour ajouter un exemple d'entrée et votre sortie attendue à partir de that..its mieux de comprendre de cette façon .. – heemayl

+0

Fait! Désolé pour ça. – Matt

0

Quelque chose comme cela devrait fais le.

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

Exemple de sortie: I généré tas de fichiers de données ..

$ 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 

Affiche les 2 premiers ID qui se produisent avec le nombre:

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

Si vous voulez que le tri peut être exécuté à l'intérieur de awk, c'est-à-dire awk '{print $1 | "sort"}' *. Aussi unique peut être géré par un reg-ex en awk. Mais cela devient un peu compliqué, ce qui précède fera le travail et sera probablement plus facile à comprendre.

+0

Merci aussi, beaucoup plus facile de voir ce qui se passe :) – Matt