awk를 사용한 문자열 검색

awk를 사용한 문자열 검색

거래 ID 목록이 포함된 file-1이 있습니다.

파일 1

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969                
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969                   
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969     

로그가 포함된 파일 2가 있습니다. 다른 곳에 파이프가 있을 수 있습니다. 따라서 파이프를 구분 기호로 사용할 수 없습니다.

파일 2

logline-1|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969**
logline-2|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969**
logline-3|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969**
logline-4|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969**
logline-5|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969**

awk... grep file-2를 사용하여 file-1의 모든 내용을 읽고 file-3을 생성하는 방법(트랜잭션 ID - file-2의 발생 횟수)

예상 파일 3

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969     2
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969     1
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969     2

답변1

awk를 사용해 볼 수 있습니다.

awk 'FNR == NR { v[$1] = 0; next; } { v[$4]++; } END { for (elem in v) { print elem, v[elem]; } }' File-1 File-2 >outfile

결과는 다음과 같습니다.

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969 1
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969 2
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969 2

하지만 왜 2개의 파일이 필요한지 아직도 모르겠습니다. File-2를 사용하여 이 작업을 수행할 수 있습니다.

awk '{ v[$4]++; } END { for (elem in v) { print elem, v[elem]; } }' File-2 >outfile

결과는 동일합니다.

관련 정보