이것은 텍스트 처리 질문입니다. 2 개의 파일이 있습니다.
joeblogs
johnsmith
chriscomp
12:00:00 (AAA) OUT: "string" joeblogs@hostname
12:00:00 (AAA) OUT: "string" joeblogs@hostname
12:00:00 (AAA) OUT: "string" johnsmith@hostname
12:00:00 (AAA) OUT: "string" joeblogs@hostname
12:00:00 (AAA) OUT: "string" chriscomp@hostname
파일 1에는 로그 (파일 2)에 나타나는 고유 한 사용자 이름 목록이 포함되어 있습니다.
원하는 출력
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER2@hostname
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER3@hostname
두 파일이 모두 필요하지 않은 것 같습니다. 파일 1은 고유 한 사용자 이름에 대해 파일 2를 구문 분석하여 생성됩니다. 내 논리는 파일 2에 나타나는 사용자 이름 목록을 가져 와서 sed
.
다음과 같은 것 :
for i in $(cat file1);do sed -e 's/$i/USER[X]';done
어디 USER[X]
각각의 고유 한 사용자 이름으로 증가합니다.
그러나 나는 이것을 할 수 없다. 논리가 건전하다고 생각조차하지 않습니다. 원하는 결과를 얻기 위해 도움을받을 수 있습니까? awk
/ sed
/ grep
/ bash
모두 환영합니다.
"2 개의 파일이 필요하지 않음" 을 확인 했으므로 다음 awk
솔루션을 사용하여 한 번에 초기 로그 파일 을 처리하십시오 .
awk '{
u_name = substr($5, 1, index($5, "@"));
if (!(u_name in users)) users[u_name] = ++c;
sub(/^[^@]+/, "USER" users[u_name], $5)
}1' file.log
출력 :
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER2@hostname
12:00:00 (AAA) OUT: "string" USER1@hostname
12:00:00 (AAA) OUT: "string" USER3@hostname
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다