
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, sed
um 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
, csvkit
siehehttps://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
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