날짜 형식 및 고유 값으로 grep을 사용하는 방법은 무엇입니까?

날짜 형식 및 고유 값으로 grep을 사용하는 방법은 무엇입니까?

많은 데이터 목록이 있습니다.

내 데이터는 다음과 같습니다

"[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"

IP 주소와 같은 고유한 값 데이터 또는 데이터 형식을 얻는 방법

01/DEC/2011 90.663.65.61 21.123.31.100

이미 동일한 값을 얻었으므로 고유한 값을 얻을 수 없습니다.

[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

암호:

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

답변1

sed요청을 완료하려면 을(를) 사용해야 합니다 .

귀하의 상황에 적합한 명령은 다음과 같습니다.

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

다음 형식만 유지하기 위해 날짜를 제거합니다 [01/DEC/2011] 90.663.65.61 21.123.31.100.

답변2

이 시도,

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

답변3

csvsql데이터가 CSV 형식인 것 같으므로 from 을 사용할 수 있습니다 csvkit.https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html#

파일 이름이 지정되었다고 가정data.csv

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

인쇄

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

당신은 또한 볼 수 있습니다https://unix.stackexchange.com/a/495010/330217

답변4

나는 항상 CSV 데이터에 CSV 파서를 사용하는 것을 권장합니다. 이것은 루비입니다:

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

관련 정보