Объединить три файла в один мастер-файл, исключив заголовок во 2-м и 3-м файлах

8

У меня есть три файла с числом строк, как указано ниже

sample1.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
.
.
.

Sample2.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
.
.
.

Sample3.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick
.
.
.

Мне нужно объединить эти три файла в один файл (Master.txt), исключив заголовки (первые 3 строки) в Sample2.txt и Sample3.txt, как указано ниже

Желаемый вывод

$cat Master.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick

Примечание: в машине AIX с Ksh 88

Баран
источник
4
Это, вероятно, лучше всего сделать программно. Возможно использование Python и Perl. Если вы часто делаете такие вещи, вы можете рассмотреть возможность использования R. R позволит вам импортировать отдельные файлы как кадры данных, а затем вы можете объединить кадры данных вместе. Я считаю, что панды Python, например, предлагают аналогичную функциональность, но я не использовал его.
Фахим Митха
@FaheemMitha Perl / Python, конечно, излишне для этого. Плюс Python в AIX может быть немного проблематичным.
Петер
@peterph Ну, может быть. Но если ему приходится часто делать такие манипуляции, то подход R может многое рекомендовать. Хотя я понятия не имею о текущем состоянии R в AIX. Хотя R практически любого винтажа должен уметь делать подобные манипуляции.
Фахим Митха
1
@FaheemMitha, с какой стати вы бы порекомендовали R для этого? Все, что нужно OP - это удалить 3 верхние строки из всех, кроме первого файла. Учитывая строго текстовый интерфейс UNIX, это работа для стандартных утилит.
Петер
1
@peterph Ну, это не обязательно для этой конкретной манипуляции, но, похоже, у автора есть необходимость манипулировать текстовыми таблицами, и в целом R - хороший способ сделать это, и, вероятно, лучше масштабируется для более сложных ситуаций. Альтернативный подход с использованием инструментов Unix, безусловно, возможен. Я не предполагаю, что это плохой путь.
Фахим Митха

Ответы:

18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt
Стефан Шазелас
источник
@Stephane Chazelas: сожалеет о предыдущем комментарии. Спасибо, все работает отлично, как и ожидалось .. !!!
Рам
1
@ram tail -n +4означает, что независимо от размера файла верхние 3 строки исключаются. Я только что попробовал это с 10 линиями тьфу. Не путайте «4» с тем фактом, что в вашем образце 4 строки. Это в основном совпадение.
Майкл Даррант
@ram :) для полноты, headимеет аналогичную опцию: -n -Xбудет печатать все, кроме последних X строк.
Петер
2
@peterph, не в AIX, не в спецификации POSIX (допускаются только положительные числа)
Стефан Шазелас
Хм, мой плохой ... это расширение GNU.
Петер
7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt
peterph
источник
2
+1 но не могли бы вы добавить немного объяснения? Что делает ${}синтаксис sed?
Terdon
Это не так ${}, но "делайте {...}строки 4 до конца"; удаляет совпадающие строки, но только после того, как прошел первый заголовок. Использование хвоста является более общим и более надежным.
Алексис
@terdon, как сказано, {}это группировка команд.
Петер
@alexis зависит от того, что вы хотите в конце концов. Одно из преимуществ (не столь важных в наши дни) заключается в том, что он порождает только один процесс. Кроме того, вы можете легко сделать это сценарием, #!/bin/sedбудучи переводчиком.
Петер