2014-11-10 2 views
0

Я использовал использованный cat, чтобы объединить несколько файлов, и все они имеют одинаковые заголовки. Есть ли в любом случае я могу сохранить появление заголовка 1st и удалить последующие заголовки внутри конкатенированного файла?Удалить дубликаты заголовков в awk

Спасибо!

Пример:

FirstName, LastName, Phone, Zip 
(data) 
(data) 
(data) 
FirstName, LastName, Phone, Zip 
(data) 
(data) 
(data) 

ответ

0

Я бы сделать это так:

sed '1h;2,$G;s/^\(.*\)\n\1$//;/./P;d' filename 
+1

Возможно, 'sed '1h; 2, $ G;/^ \ (. * \) \ N \ 1 $/d; P' файл' тоже может работать. – potong

+0

@potong: Я пробовал этот подход до того, как я опубликовал его и не смог заставить его работать, - тогда я увидел ваш комментарий, попробовал еще раз, избегал нескольких подводных камней, которые я заметил * после того, как решила против этого подхода, и теперь оно работает! Упрощенный, и один символ короче, хороший улов. – Beta

0

Вы можете сделать это:

cp file1 result 
tail -q -n +2 file2 file3 file4 >> result 

То есть, начать со всем содержимым file1, затем добавить из других файлов, начиная с линии 2 каждого из них. Таким образом, вы избегаете необходимости искать дополнительные заголовки и удалять их позже.

Если вы хотите, вот другая формулировка того же:

head -1 file1 > result 
tail -q -n +2 file1 file2 file3 file4 >> result 
+0

Это хорошо работало, хотя я забыл упомянуть, что у меня есть 67 файлов, которые должны быть сцеплены, было бы утомительно для меня, если использовать его. Благодарю вас. – Johann

+0

Если вы нашли ответ полезным и интересным, вы могли бы его перенести. :) –

0

Попробуйте:

sed -e '2,$s/FirstName, LastName, Phone, Zip//g' -e '/^$/d' Yourfile.txt 

Вы можете заменить "FirstName, LastName, Телефон, Zip" с любым заголовком у вас есть. От 2-й линии до конца файла, он удалит скороговорку заголовка с, а затем удалить пустые строки с/^ $/д»

+0

Снятие заголовков сработало, хотя оно не удаляло пробелы. Благодарю вас. – Johann

0

Вот awk версия. Это будет Скип все линии с FirstName кроме линии 1

awk 'NR>1 && /^FirstName/ {next}1' file 
FirstName, LastName, Phone, Zip 
(data) 
(data) 
(data) 
(data) 
(data) 
(data) 

Если строка заголовка сделать изменения, нам нужен образец для подражания.

0

AWK путь

awk '!a[$0];NR==1{a[$0]++}' file 
Смежные вопросы