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)
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.
Vous pouvez laisser trier uniquement la 4ème clé, puis demander uniquement les enregistrements avec des clés uniques:
grep name1 | sort -k4 -u
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
En tant que solution awk tout-en-un:
awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename
À 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.