awk 및/또는 grep을 사용하여 사전 정의된 값을 기반으로 개별 행을 검색한 후 다음 행에 일치하는 값이 있는지 확인하세요.

awk 및/또는 grep을 사용하여 사전 정의된 값을 기반으로 개별 행을 검색한 후 다음 행에 일치하는 값이 있는지 확인하세요.

다음 줄을 얻는다고 가정 해 봅시다.

[duration] =>  92
[from] => 18884541236
[to] => 17841234568

내가 원하는 것은 전체 파일을 검색하여 [Sender] 번호가 [Recipient] 번호와 동일한 인스턴스를 확인하는 것입니다.

그래서 다음과 같은 항목이 있다면

[duration] => 43
[from] =>  17873332222
[to] => 17873332222

다음 줄에서 [from] 번호 바로 뒤에 동일한 [to] 번호가 오는 위치를 파일에서 검색할 수 있습니다.

답변1

[to]이 명령은 줄 번호와 첫 번째 필드가 있고 세 번째 필드가 가장 최근에 표시된 값과 동일한 줄의 내용을 인쇄합니다 [from].

awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file 

이 파일을 입력으로 사용하십시오.

[duration] =>  92
[from] => 18884541236
[to] => 17841234568
[duration] => 43
[from] =>  17873332222
[to] => 17873332222

다음과 같은 결과가 나타납니다.

$ awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file 
6 [to] => 17873332222

답변2

샘플로 보니까 (위험한 건 알겠는데)

[duration]결코 동일하지 [from]않고 [to]항상 준수된다면 이것은 간단할 수 있습니다.

awk '$3==last{ print NR, $0} {last=$3}' file

관련 정보