AWK 대회는 정기적으로 개최됩니다. 열이 정렬되지 않았습니다.

AWK 대회는 정기적으로 개최됩니다. 열이 정렬되지 않았습니다.

한동안 이 문제를 해결하려고 노력해 왔습니다. 이 웹사이트를 발견하고 미친 듯이 구글링을 했습니다. 누구든지 도와주실 수 있다면 감사하겠습니다.

헤더와 열이 없는 일부 로그 파일이 여기저기에 있습니다. 이는 src=4.2.2.2와 같은 항목이 파일의 어느 곳에나 있을 수 있음을 의미합니다. 파일의 모든 개체는 Something=xxx 형식을 갖습니다.

로그 예:

src=1.1.1.1 sport=12312 dport=80 메시지=해킹됨

dport=443 src=2.2.2.2 메시지=null 스포츠=32432

메시지=클린 dport=21 이동=43434 src=3.3.3.3

match() 함수를 사용했지만 여러 필드를 추출하려고 합니다.

gawk 'match($0, "src=([^ ]+)") { print substr($0, RSTART, RLENGTH) } ' 파일

나에게 다음을 제공합니다 :

소스=1.1.1.1

소스=2.2.2.2

소스=3.3.3.3

출력이 다음과 같이 정렬되도록 src, dport 및 message와 같은 여러 필드를 원합니다.

src=1.1.1.1 dport=80 message=해커 공격

src=2.2.2.2 dport=443 메시지=null

src=3.3.3.3 dport=21 메시지=청소

gawk나 다른 것을 사용하여 이 작업을 수행할 수 있습니까?

감사해요!

답변1

GNU awk 사용(참고: "키" 문자열의 어휘 정렬 순서에 따라 다름):

gawk '{split($0,a); asort(a); printf("%s\t%s\t%s\n", a[4], a[1], a[2])}' file
src=1.1.1.1     dport=80        message=hacked
src=2.2.2.2     dport=443       message=null
src=3.3.3.3     dport=21        message=clean

답변2

Awk솔루션(프로젝트 위치에 관계없음):

awk 'function get_item(name){ 
         match($0, name"=[^[:space:]]+"); 
         return substr($0, RSTART, RLENGTH) 
     }
     { print get_item("src"), get_item("dport"), get_item("message") }' file

위의 방법을 사용하면 주요 필수 항목을 순서에 관계없이 출력할 수 있습니다.

산출:

src=1.1.1.1 dport=80 message=hacked
src=2.2.2.2 dport=443 message=null
src=3.3.3.3 dport=21 message=clean

관련 정보