tshark 필드의 일부 출력을 처리 중입니다. 일부 처리가 이미 발생했으며 마지막 필드가 중복 된 인접한 행이 있습니다. 이러한 중복에는 일치하는 시퀀스 번호가있는 행이 없습니다. 작업은 시퀀스 열이 일치하는 인접한 행 쌍만 유지하는 것입니다. 마지막 필드는 0과 130의 값을 가지고 행의 각 쌍은 130에서 시작합니다. 시퀀스는 0-15 사이의 숫자입니다. 데이터 스트림에 많은 행이 들어 있습니다. 필드는 :awk는 중복 된 필드를 기반으로 인접한 라인을 유지합니다.
date time src-int dst-int seq function
24/01/2017 16:57:27.307400000 10 1000 11 130
24/01/2017 16:57:27.418675000 1000 10 11 0
24/01/2017 16:58:53.603604000 1000 10 12 0
24/01/2017 16:58:54.121603000 10 1000 13 130
24/01/2017 16:58:54.677752000 10 1000 14 130
24/01/2017 16:58:54.681079000 1000 10 14 0
24/01/2017 17:09:12.974979000 10 1000 1 130
24/01/2017 17:09:12.981149000 1000 10 1 0
24/01/2017 17:09:13.477211000 1000 10 2 0
24/01/2017 17:09:14.026279000 1000 10 3 0
원하는 출력 함수 순서 130 다음 0과 일치하는 시퀀스 번호 행의 쌍을 유지하는 것이다
24/01/2017 16:57:27.307400000 10 1000 11 130
24/01/2017 16:57:27.418675000 1000 10 11 0
24/01/2017 16:58:54.677752000 10 1000 14 130
24/01/2017 16:58:54.681079000 1000 10 14 0
24/01/2017 17:09:12.974979000 10 1000 1 130
24/01/2017 17:09:12.981149000 1000 10 1 0
I 해결책 절반 일이있다. \t130$
과 일치하고 시퀀스가 일치하는 경우 다음 행을 가져옵니다. 그러나 좋은 데이터를 반환하지만 중복 값 130을 처리하지 않습니다. 예제 데이터에서 시퀀스 14는 생략됩니다. 인접한 중복 행의 수는 임의적이므로 다른 테스트를 중첩하는 것은 어리석은 것처럼 보입니다.
awk "/\t130$/ {seq=$5; prev=$0; getline;} $5==seq {print prev; print;}"
시작 조건에서 모든 중복을 처리하는 가장 좋은 방법은 무엇입니까?
BTW, Windows 7에서 GNU awk 사용. FWIW 두 행은 궁극적으로 표시되지 않도록 print prev,$0
을 사용하여 궁극적으로 연결됩니다.
감사합니다. 흐름에 관해서는 두 번째'{action} '이 조건이 없기 때문에 항상 실행되는 것으로 생각합니다. 그렇다면 왜 b? 또한 두 개의 print 문을 사용하는 대신 줄 끝을 추가하는 이유는 무엇입니까? – gloopy
1. 소란 스럽다. 2. 특히. –
이 응답은 일치 항목이 인접한 라인에 있어야한다는 것을 나타냅니다. 문제에 가장 정확하게 맞는 것처럼 정확하게 표시하십시오. – gloopy