2014-01-30 2 views
3

Как удалить несколько заголовков из файла? Я попытался использовать приведенный ниже код после нахождения его от How can I delete duplicate lines in a file in Unix?.Есть ли способ удалить дубликат заголовка в файле в 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