grep/awk/sed를 사용하여 2개의 파일 정렬 및 병합

grep/awk/sed를 사용하여 2개의 파일 정렬 및 병합

MAC 주소가 나열된 Wi-Fi 로그를 받고 있습니다. 내 라우터에 연결된 장치의 MAC 공급업체/제조업체를 알고 싶습니다. 2개의 파일이 있는데 그 중 하나에는 MAC의 처음 3옥텟을 표시하는 MAC "grep"이 있습니다. 또 다른 파일에는 공급업체 목록과 해당 릴리스의 처음 3옥텟이 포함되어 있습니다. 이제 문제는 첫 번째 파일에 중복 항목이 여러 개 있다는 것입니다. 두 번째 파일에서도 해당 중복 항목을 일치시킬 수 있지만 첫 번째 파일에 중복 항목이 몇 개 있는지는 표시되지 않습니다. 아래는 예시입니다.

텍스트.txt

00:10:f6
00:10:f6
03:48:03
8f:91:34
93:ab:c6

공급자.xml

03:48:03 vendor="apple"
00:10:f6 vendor="micro"
8f:91:34 vendor="dell"
93:ab:c6 vendor="sun"
23:8b:23 vendor="acer"
00:73:ad vendor="asus"

다음 코드를 실행했을 때 얻은 결과는 다음과 같습니다.

cat text.txt vendor.xml |grep -Ff text.txt vendor.xml |sort -u |uniq -c >> final.txt

최종결과.txt

  1 00:10:f6 vendor="micro"
  1 03:48:03 vendor="apple"
  1 8f:91:34 vendor="dell"
  1 93:ab:c6 vendor="sun"

결과는 다음과 같습니다.

  2 00:10:f6 vendor="micro"
  1 03:48:03 vendor="apple"
  1 8f:91:34 vendor="dell"
  1 93:ab:c6 vendor="sun"

내가 생각하지 못한 플래그나 옵션이 있나요?

ベストアンサー1

join파일 병합(정렬된 입력 필요):

$ join <(sort text.txt) <(sort vendor.xml)
00:10:f6 vendor="micro"
00:10:f6 vendor="micro"
03:48:03 vendor="apple"
8f:91:34 vendor="dell"
93:ab:c6 vendor="sun"

이제 남은 것은 uniq -c계산을 수행하기 위해 추가하는 것입니다.

$ join <(sort text.txt) <(sort vendor.xml) | uniq -c
      2 00:10:f6 vendor="micro"
      1 03:48:03 vendor="apple"
      1 8f:91:34 vendor="dell"
      1 93:ab:c6 vendor="sun"

おすすめ記事