web-dev-qa-db-fra.com

trouver des valeurs uniques dans un fichier de données

Je peux le faire en python mais je me demandais si je pouvais le faire sous Linux

J'ai un fichier comme ça

name1 text text 123432re text
name2 text text 12344qp text
name3 text text 134234ts text

Je veux trouver tous les différents types de valeurs dans la 3ème colonne par un nom d'utilisateur particulier, disons nom 1.

grep name1 nomfichier me donne toutes les lignes, mais il doit y avoir un moyen de simplement lister tous les différents types de valeurs? (Je ne veux pas afficher les valeurs en double pour le même nom d'utilisateur)

14
Illusionist
grep name1 filename | cut -d ' ' -f 4 | sort -u

Cela trouvera toutes les lignes qui ont le nom1, puis obtiendra seulement la quatrième colonne de données et affichera seulement des valeurs uniques.

35
Mike Mertsock

Vous pouvez laisser trier uniquement la 4ème clé, puis demander uniquement les enregistrements avec des clés uniques:

grep name1 | sort -k4 -u
8
Michał Šrajer

J'ai essayé d'utilisercat

Le fichier contient: (ici le fichier est foo.sh, vous pouvez entrer n'importe quel nom de fichier ici)

$cat foo.sh

tar
world
class
Zip
zip
Zip
python
jin
jin
doo
doo

uniq obtiendra chaque mot une seule fois

$ cat foo.sh | sort | uniq

class
doo
jin
python
tar
world
Zip

uniq -u aura le mot apparu une seule fois dans le fichier

$ cat foo.sh | sort | uniq -u

class
python
tar
world

uniq -d obtiendra les seuls mots en double et les imprimera une fois

$ cat foo.sh | sort | uniq -d

doo
jin
Zip
5
Rohan Khude

En tant que solution awk tout-en-un:

awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename
1
glenn jackman

À mon avis, vous devez sélectionner le champ dans lequel vous avez besoin des valeurs uniques. J'essayais de récupérer des adresses IP source uniques à partir du journal IPTables.

cat /var/log/iptables.log | grep "May  5" | awk '{print $11}' | sort -u

Voici le résultat de la commande ci-dessus:

SRC=192.168.10.225

SRC=192.168.10.29

SRC=192.168.20.125

SRC=192.168.20.147

SRC=192.168.20.155

SRC=192.168.20.183

SRC=192.168.20.194

La meilleure idée est donc de sélectionner d'abord le champ, puis de filtrer les données uniques.

0
Mansur Ali