awk 명령을 사용하여 csv 셀에서 특정 단어를 추출하는 방법에 대한 도움이 필요합니까?
파일 이름: 감사 로그.csv
칼럼: D
{"CreationTime":"2022-05-24T19:40:38","Id":"034ad6cv-b57c-4d14-8f42-0a312a8c6423","Operation":"UserLoggedIn","OrganizationId":"b54f43fe-5553- 34cr-9d67-3ed3b8b1c487","RecordType":15,"ResultStatus":"성공","UserKey":"13f42edc-acc4-2d43-b042-8734d938c23d","UserType":0,"버전":1," 워크로드":"AzureActiveDirectory","ClientIP":"192.223.211.111","ObjectId":"00000021-0322-0ff1-ce00-000000000000","UserId":"[이메일 보호됨]","AzureActiveDirectoryEventType":1,"ExtendedProperties":[{"Name":"ResultStatusDetail","Value":"Success"},{"Name":"UserAgent","Value":"JAS3POPE"},{ "이름":"UserAuthenticationMethod","값":"1"},{"이름":"요청 유형","값":"OAuth2:Token"}],"ModifiedProperties":[],"Actor":[ {"ID":"034ad6cv-b57c-4d14-8f42-0a312a8c6423","유형":0},{"ID":"[이메일 보호됨]","Type":5}],"ActorContextId":"b45f44de-9876-22cf-9d34-3ed3b8b1c987","ActorIpAddress":"192.223.211.111","InterSystemsId":"b10f76da-cbf3-23a7-86d8-9876085 4baba ","IntraSystemId":"022ad6ab-b57c-4d09-8f67-0a983a8c8787","SupportTicketId":"","대상":[{"ID":"00000023-3243-0ff1-ce00-000000009887","유형 " :0}],"TargetContextId":"b23f34de-9890-23cf-9d34-3ed3b8b1c988","ApplicationId":"00000023-0230-0ff1-ce00-000000000000","DeviceProperties":[{"Name":"BrowserType " ,"value":"Other"},{"name":"IsCompliantAndManaged","value":"False"},{"name":"SessionId","value":"b8787err-4afb-9898-bebb - 498f8e9898abb"}],"오류 번호":"0"}
이 컬럼에서 제가 추출하고 싶은 단어는 ActorIpAddress:192.223.211.111 입니다.
awk 명령이나 다른 도구를 사용하여 추출하는 데 도움을 줄 수 있는 사람이 있습니까? 이 모든 것이 D 열에 있습니다.
참고: 개인 정보 보호를 위해 모든 세부 정보는 임의의 문자로 변경되었습니다.
미리 감사드립니다. 제이
답변1
감사 파일은 실제로 형식이 잘 지정된 json
파일입니다. 이 경우 jq
패키지 관리자(예: sudo apt install jq
. 만일을 대비해 간략한 분석을 제공하겠지만 jq
, 값만 원하는 경우 맨 아래로 스크롤하여 단일 행을 볼 수 있습니다.
json
1. 가독성을 높이기 위해 AuditLog.csv 파일 형식을 지정하는 방법 :
cat AuditLog.csv | jq
터미널 내에서 실행될 때 위 명령의 출력은 다음과 유사해야 합니다(색상도 표시되어야 하지만 그렇지 않은 경우 -C
위 명령 뒤에 플래그를 추가합니다).jq
{
"Actor": [
{
"ID": "034ad6cv-b57c-4d14-8f42-0a312a8c6423",
"Type": 0
},
{
"ID": "[email protected]",
"Type": 5
}
],
"ActorContextId": "b45f44de-9876-22cf-9d34-3ed3b8b1c987",
"ActorIpAddress": "192.223.211.111",
"ApplicationId": "00000023-0230-0ff1-ce00-000000000000",
"AzureActiveDirectoryEventType": 1,
"ClientIP": "192.223.211.111",
"CreationTime": "2022-05-24T19:40:38",
"DeviceProperties": [
{
"Name": "BrowserType",
"Value": "Other"
},
{
"Name": "IsCompliantAndManaged",
"Value": "False"
},
{
"Name": "SessionId",
"Value": "b8787err-4afb-9898-bebb-498f8e9898abb"
}
],
"ErrorNumber": "0",
"ExtendedProperties": [
{
"Name": "ResultStatusDetail",
"Value": "Success"
},
{
"Name": "UserAgent",
"Value": "JAS3POPE"
},
{
"Name": "UserAuthenticationMethod",
"Value": "1"
},
{
"Name": "RequestType",
"Value": "OAuth2:Token"
}
],
"Id": "034ad6cv-b57c-4d14-8f42-0a312a8c6423",
"InterSystemsId": "b10f76da-cbf3-23a7-86d8-98760854baba",
"IntraSystemId": "022ad6ab-b57c-4d09-8f67-0a983a8c8787",
"ModifiedProperties": [],
"ObjectId": "00000021-0322-0ff1-ce00-000000000000",
"Operation": "UserLoggedIn",
"OrganizationId": "b54f43fe-5553-34cr-9d67-3ed3b8b1c487",
"RecordType": 15,
"ResultStatus": "Success",
"SupportTicketId": "",
"Target": [
{
"ID": "00000023-3243-0ff1-ce00-000000009887",
"Type": 0
}
],
"TargetContextId": "b23f34de-9890-23cf-9d34-3ed3b8b1c988",
"UserId": "[email protected]",
"UserKey": "13f42edc-acc4-2d43-b042-8734d938c23d",
"UserType": 0,
"Version": 1,
"Workload": "AzureActiveDirectory"
}
2. 모든 최상위 키 목록을 얻는 방법:
이전 명령은 구조화되고 색상이 지정된 출력을 제공 json
하지만 로그에서 특정 값을 찾을 때 여전히 구문 분석해야 합니다. jq
이 값과 기타 값은 key=value 쌍을 통해 쉽게 제공될 수 있습니다. 즉, 키를 제공하면 해당 jq
값이 제공됩니다. 구문 형식은 다음과 같습니다.
`cat[file.json] | jq '.[key].[subkey][.subsubkey]'
- 이제 일반적으로 사용 가능한 최상위 키 목록을 먼저 살펴보겠습니다.
cat AuditLog.csv | jq 'keys'
[
"Actor",
"ActorContextId",
"ActorIpAddress",
"ApplicationId",
"AzureActiveDirectoryEventType",
"ClientIP",
"CreationTime",
"DeviceProperties",
"ErrorNumber",
"ExtendedProperties",
"Id",
"InterSystemsId",
"IntraSystemId",
"ModifiedProperties",
"ObjectId",
"Operation",
"OrganizationId",
"RecordType",
"ResultStatus",
"SupportTicketId",
"Target",
"TargetContextId",
"UserId",
"UserKey",
"UserType",
"Version",
"Workload"
]
3. 마지막 단계 - 주어진 키에 해당하는 값을 가져옵니다.
키 이름을 알고 나면 이를 사용하여 저장된 값을 가져올 수 있습니다. 귀하의 경우에는 특별히 다음을 찾고 있습니다 ActorIpAddress
(노트.
: 값을 검색할 때마다 키 이름 앞에 필수 항목을 적어 두십시오 .)
cat AuditLog.csv | jq '.ActorIpAddress'
"192.223.211.111"
추가: 여러 값 또는 체인 아래의 값을 더 가져와야 하는 경우.
예 1: "ActorIpAddress, UserId 및 UserKey"를 함께 입력합니다.
cat stack.csv | jq ".ActorIpAddress, .UserId,.UserKey"
"192.223.211.111"
"[email protected]"
"13f42edc-acc4-2d43-b042-8734d938c23d"
전임자. 2: 사용자 에이전트 키 "UserAgent"의 값과 OAuth 일치 값의 키를 얻어서 key=value 형식으로 출력합니다.
$cat stack.json | jq -C '.ExtendedProperties[] | select(.Name=="UserAgent" or .Value=="OAuth2:Token") | "\(.Name) = \(.Value)"'
"UserAgent = JAS3POPE"
"RequestType = OAuth2:Token"