>

두 개의 파일이 있습니다 : master.tbl  그리고 sites.lst

파일 master.tbl  포트 구성, 포트 이름, IP 주소 등이있는 사이트 목록입니다. 사이트 설명, 주석 등이 포함 된 행이 있지만 관련이 없습니다. 사이트 구성을 포함하는 줄은 이렇게 배열되며 공백으로 구분됩니다. :

{server} {SITE NAME} {port name} {configuration flags}

포트 이름은 소문자로 된 사이트 이름, 대시, "P"및 포트 번호로 구성됩니다.

예 :

server01 HAWAII23-USR hawaii23-P1 blah-configuration-blah-arguments
server01 HAWAII23-ADM hawaii23-P2 blah-configuration-blah-arguments
server01 HAWAII23-ADM hawaii23-P3 blah-configuration-blah-arguments
server01 HAWAII23-USR hawaii23-P4 blah-configuration-blah-arguments

sites.lst   master.tbl 를 검색해야하는 사이트 목록입니다  파일.

댓글을 달아야합니다 ( # 삽입)  행의 시작 부분에서) 및 서버 이름 및 포트 이름 ( stoplist.lst 라는 파일로)을 추출하십시오. )에 따라 모든 기준을 충족해야합니다.

<올>
  • sites.lst 에 나열된 사이트 이름이 들어 있습니다.
  • "-ADM"포함
  • 포트 번호가 '2'보다 큽니다 (예 : hawaii23-P3 )
  • 위의 예에서 master.tbl  파일은 다음과 같습니다 :

    server01 HAWAII23-USR hawaii23-P1 blah-configuration-blah-arguments
    server01 HAWAII23-ADM hawaii23-P2 blah-configuration-blah-arguments
    #server01 HAWAII23-ADM hawaii23-P3 blah-configuration-blah-arguments
    server01 HAWAII23-USR hawaii23-P4 blah-configuration-blah-arguments
    
    

    ...와 stoplist.lst  포함 ( HAWAII23 가정)   sites.lst 에 있습니다 ) :

    server01 hawaii23-P3
    
    

    master.lst  거의 300,000 줄이므로 수동으로 수행하는 것은 좋지 않습니다.

    • 답변 # 1

      여기 awk 가 있습니다  해결책 :

      awk 'NR==FNR{z[$0"-ADM"]++;next}
      {p=$3;sub(/.*-P/, "", p); if ($2 in z && p > 2)
      {print $1,$3 > "stoplist.lst"; $0="#"$0}}1' sites.lst master.tbl
      
      

      이 글은 sites.lst 입니다.  먼저 $0"-ADM" 를 설정  (즉, 사이트 이름 + 문자열 -ADM )를 배열 z 의 인덱스로 . 그런 다음 master.tbl 를 처리합니다.   -P 후 값 추출   p 로 세 번째 필드에서  조건이 충족되면 (두 번째 필드는 z 에 있음)  그리고 p  2보다 큼) 첫 번째와 세 번째 필드를 stoplist.lst 에 인쇄합니다.  줄을 주석 처리합니다.
      파일을 그 자리에서 편집하지는 않지만 모든 것이 정상이면 항상 다른 파일로 리디렉션하고 원본을 덮어 쓸 수 있습니다 (최근의 gnu awk 를 사용하더라도)  당신은 옵션 -i inplace 가 ).

  • 이전 X11 터미널 에뮬레이터에서 PSF 글꼴 사용
  • 다음 shell - 각 서브 디렉토리의 파일 이름을 해당 서브 디렉토리의 텍스트 파일로 수집하는 방법은 무엇입니까?