Ich kann das in Python machen, aber ich habe mich gefragt, ob ich das unter Linux tun könnte
Ich habe eine solche Datei
name1 text text 123432re text
name2 text text 12344qp text
name3 text text 134234ts text
Ich möchte alle verschiedenen Arten von Werten in der 3. Spalte anhand eines bestimmten Benutzernamens finden, sagen wir Name 1.
grep name1 Dateiname gibt mir alle Zeilen, aber es muss eine Möglichkeit geben, alle unterschiedlichen Wertetypen aufzulisten. (Ich möchte keine doppelten Werte für denselben Benutzernamen anzeigen.)
grep name1 filename | cut -d ' ' -f 4 | sort -u
Dadurch werden alle Zeilen gefunden, die name1 haben. Dann wird nur die vierte Datenspalte abgerufen und nur eindeutige Werte angezeigt.
Sie können sort nur nach dem vierten Schlüssel suchen und dann nur nach Datensätzen mit eindeutigen Schlüsseln fragen:
grep name1 | sort -k4 -u
Ich habe versucht mitcat
Datei enthält: (hier ist foo.sh die Datei kann hier eingegeben werden)
$cat foo.sh
tar
world
class
Zip
zip
Zip
python
jin
jin
doo
doo
uniq
erhält jedes Wort nur einmal
$ cat foo.sh | sort | uniq
class
doo
jin
python
tar
world
Zip
uniq -u
wird das Wort nur einmal in der Datei erscheinen lassen
$ cat foo.sh | sort | uniq -u
class
python
tar
world
uniq -d
erhält nur die doppelten Wörter und druckt sie einmal
$ cat foo.sh | sort | uniq -d
doo
jin
Zip
Als All-In-One-Lösung von awk:
awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename
Meiner Meinung nach müssen Sie das Feld auswählen, aus dem Sie die eindeutigen Werte benötigen. Ich habe versucht, eindeutige Quell-IPs aus dem IPTables-Protokoll abzurufen.
cat /var/log/iptables.log | grep "May 5" | awk '{print $11}' | sort -u
Hier ist die Ausgabe des obigen Befehls:
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
Daher ist es am besten, zuerst das Feld auszuwählen und dann die eindeutigen Daten herauszufiltern.