2016-06-08 5 views
0

난 다음, 그것은 \ n을 (빈/단지 포함 개행 라인)라인 줄 바꿈이 경우, 또는 AWK 발견 #

당신은 내가 칠 수있는 방법을 알아 그냥 #하지만 그와 라인을 무시하는 것이 돌 하나 두 마리? I.E. 행에 1 문자 이상이 포함되어 있지 않으면 행을 삭제하십시오.

function check_duplicates { 

awk ' 
    FNR==1{files[FILENAME]} 
     {if((FILENAME, $0) in a) dupsInFile[FILENAME] 
      else 
      {a[FILENAME, $0] 
      dups[$0] = $0 in dups ? (dups[$0] RS FILENAME) : FILENAME 
      count[$0]++}} 
       {if ($0 ~ /#/) { 
        delete dups[$0] 
       }} 
#Print duplicates in more than one file 
     END{for(k in dups) 
      {if(count[k] > 1) 
       {print ("\n\nDuplicate line found: " k) " - In the following file(s)" 
       print dups[k] }} 
     printf "\n"; 
     }' $SITEFILES 

awk ' 
NR { 
    b[$0]++ 
    } 
     $0 in b { 
      if ($0 ~ /#/) { 
      delete b[$0] 
         } 
        if (b[$0]>1) { 
        print ("\n\nRepeated line found: "$0) " - In the following file" 
        print FILENAME 
        delete b[$0] 
        } 
    }' $SITEFILES 

} 

예상되는 입력은 대개 다음과 같습니다.

#File Path's 
/path/to/file1 
/path/to/file2 
/path/to/file3 
/path/to/file4 



# 
/more/paths/to/file1 
/more/paths/to/file2 
/more/paths/to/file3 
/more/paths/to/file4 
/more/paths/to/file5 
/more/paths/to/file5 

이 경우/more/paths/to/file5는 두 번 발생하며 그와 같은 플래그가 지정되어야합니다.

그러나 많은 줄 바꿈이 있는데, 나는 그것을 무시하고 싶습니다.

어, 그것은 또한 내가 사후 처리의 톤을하고있어, 그이 : 정말 될 것으로 보인다

괜찮아 경우,이 비트에 대한 AWK 다를 싶지 않아, awk가되어야한다 내가 예상했던 것보다 약간 힘든.

건배, 벤

+1

여러분은 프로그램 흐름을 쉽게 따라갈 수 있도록 형식을 향상시킬 수 있습니다. – 123

+1

또한 dups 어레이를 설정하거나 아무것도 추가하지 않은 것으로 보이는이 전체 프로그램입니까? 실제로 나는이 스크립트에서 당신이 무엇을하려고하는지 잘 풀 수가 없다? 이 스크립트가 해결해야하는 문제를 게시 할 수 있습니까? – 123

+0

위의 업데이트. # 및 \ n 문자를 무시하고 \ n 무시할 수 없습니다. –

답변

2

당신은 결합 할 수 있습니다 모두 하나의 정규식에 if.

if ($0 ~ /#|\n/) { 
    delete dups[$0] 
} 

또는

는 당신이 라인의 시작

  • ^ 일치를 무엇

    if ($0 ~ /^#?$/) { 
        delete dups[$0] 
    } 
    

    을 쓸 수 있습니다 더 구체적으로.

  • #? 라인 중 하나 또는 제로 #

  • $ 일치 단부 일치.

그래서, ^$ 일치 빈 줄 만 #^#$ 일치 라인.

+0

감사하지만 아름답게 작성되었지만 awk 내에서 전혀 작동하지 않는 것 같습니다. –

+1

@BenCoughlan 포함 및 예제 입력과 예상 출력을 포함 할 수 있다면 사람들이 대답하기가 훨씬 쉬울 것입니다. 당신이 제공 한 awk scrip은 피할 수있는 여분의 줄을 포함하고있는 것 같습니다. – nu11p01n73R

+0

입력 값은 매우 일반적이지만 위의 값입니다. –