Wie kann ich grep mit einem Datumsformat und einem eindeutigen Wert verwenden?

Wie kann ich grep mit einem Datumsformat und einem eindeutigen Wert verwenden?

ich habe eine riesige Datenliste

Meine Daten sehen so aus

"[01/Dec/2011:20:53:04 +0900] ","COMZ","90.663.65.61","21.123.31.100","250","CONNECT","t.ierz.er:443","13127","836"
"[01/Dec/2011:22:20:01 +0900] ","COMZ","90.663.65.61","21.123.31.100","250","CONNECT","t.ierz.er:443","13127","836"
"[02/Dec/2011:24:33:04 +0900] ","COMZ","20.663.65.61","2.123.91.100","220","CONNECT","t.ierz.er:443","13127","836"

Wie kann ich ein Datenformat wie eindeutige Wertdaten oder eine IP-Adresse erhalten?

01/DEC/2011 90.663.65.61 21.123.31.100

Weil ich denselben Wert erhalten habe und den eindeutigen Wert nicht erhalten kann

[01 / Dec / 2011: 20: 53: 04 0900] 90.663.65.61 21.123.31.100
[01 / Dec / 2011: 20: 53: 04 0900] 90.663.65.61 21.123.31.100

Code:

file.csv | awk -F\" '{print $2,$6,$8}' | sort | uniq -c | sort -n

Antwort1

Verwenden Sie, sedum Ihre Anfrage abzuschließen.

Hier ist ein Befehl, der in Ihrem Fall funktionieren sollte:

 cat file.csv | awk -F\" '{print $2,$6,$8}' | sed 's#\(:[[:digit:]]\{2\}\)\{3\} +0900##' | sort | uniq -c | sort -n

Dadurch wird das Datum entfernt und nur dieses Format beibehalten: [01/DEC/2011] 90.663.65.61 21.123.31.100.

Antwort2

Versuche dies,

 awk -F '[:"[]' '{print $3" "$10" "$12}' file.csv | sort | uniq 

Antwort3

Da Ihre Daten im CSV-Format zu sein scheinen, können Sie sie möglicherweise verwenden csvsql, csvkitsiehehttps://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html#

Angenommen, Ihre Datei heißtdata.csv

csvsql -H --query 'SELECT a,c,d FROM data GROUP BY c,d' data.csv

druckt

a,c,d
[02/Dec/2011:24:33:04 +0900] ,20.663.65.61,2.123.91.100
[01/Dec/2011:22:20:01 +0900] ,90.663.65.61,21.123.31.100

Siehe auchhttps://unix.stackexchange.com/a/495010/330217

Antwort4

Ich empfehle immer, einen CSV-Parser für CSV-Daten zu verwenden. Hier ist Ruby:

ruby -rcsv -ne 'CSV.parse($_) do |row|
  puts [row[0][1..11].upcase, row[2], row[3]].join " "
end' | sort -u
01/DEC/2011 90.663.65.61 21.123.31.100
02/DEC/2011 20.663.65.61 2.123.91.100

verwandte Informationen