2014-01-30 2 views
3

파일에서 여러 헤더를 삭제하려면 어떻게해야합니까? How can I delete duplicate lines in a file in Unix?에서 찾은 후 아래 코드를 사용하려고했습니다.유닉스에서 파일의 중복 헤더를 삭제하는 방법이 있습니까?

awk '!x[$0]++' file.txt 

파일의 모든 중복 레코드가 삭제됩니다. 하지만 필자의 경우 중복 된 레코드가 아니라 중복 된 헤더 만 제거하면됩니다.

column1, column2, column3, column4, column5 
value11, value12, value13, value14, value14 
value21, value22, value23, value24, value25 
value31, value32, value33, value34, value35 
value41, value42, value43, value44, value45 
value51, value52, value53, value54, value55 
value21, value22, value23, value24, value25 
column1, column2, column3, column4, column5 
value11, value12, value13, value14, value14 
value21, value22, value23, value24, value25 
column1, column2, column3, column4, column5 
column1, column2, column3, column4, column5 

나는 다음과 같이 출력 기대하고있다 : 첫 번째 라인은 헤더가 포함되어 있는지 알고 있다면

column1, column2, column3, column4, column5 
value11, value12, value13, value14, value14 
value21, value22, value23, value24, value25 
value31, value32, value33, value34, value35 
value41, value42, value43, value44, value45 
value51, value52, value53, value54, value55 
value21, value22, value23, value24, value25 
value11, value12, value13, value14, value14 
value21, value22, value23, value24, value25 

답변

8

, 그냥 다른 모든 인스턴스를 삭제를 예를 들어, 나는 아래의 데이터 파일이 그것의.

awk 'FNR==1 { header = $0; print } 
    $0 != header' file 

그래도 작동하지 않으면 헤더 행을 식별하는 방법을 알려주십시오. 정적 문자열 인 경우 grep -vF 'that string'이거나 특정 정규식과 일치하는 경우 grep -v 'that regex'입니다.

+3

'$ 0 == 헤더는 {다음} 1' 단지'$ 0 = header'과 같이 쓸 수있다. –

1

당신 (GNU이 나오지도)에 대한이 작동 될 수 있습니다!

sed -r '1h;1!G;/^(.*)\n\1/d;P;D' file