Сделайте Вы имеете в виду что-то вроде этого:
function Animal() {
//Initialization for all Animals
}
//Function and properties shared by all instances of Animal
Animal.prototype.init=function(name){
this.name=name;
}
Animal.prototype.say=function(){
alert(this.name + " who is a " + this.type + " says " + this.whattosay);
}
Animal.prototype.type="unknown";
function Cat(name) {
this.init(name);
//Make a cat somewhat unique
var s="";
for (var i=Math.ceil(Math.random()*7); i>=0; --i) s+="e";
this.whattosay="Me" + s +"ow";
}
//Function and properties shared by all instances of Cat
Cat.prototype=new Animal();
Cat.prototype.type="cat";
Cat.prototype.whattosay="meow";
function Dog() {
//Call init with same arguments as Dog was called with
this.init.apply(this,arguments);
}
Dog.prototype=new Animal();
Dog.prototype.type="Dog";
Dog.prototype.whattosay="bark";
//Override say.
Dog.prototype.say = function() {
this.openMouth();
//Call the original with the exact same arguments
Animal.prototype.say.apply(this,arguments);
//or with other arguments
//Animal.prototype.say.call(this,"some","other","arguments");
this.closeMouth();
}
Dog.prototype.openMouth=function() {
//Code
}
Dog.prototype.closeMouth=function() {
//Code
}
var dog = new Dog("Fido");
var cat1 = new Cat("Dash");
var cat2 = new Cat("Dot");
dog.say(); // Fido the Dog says bark
cat1.say(); //Dash the Cat says M[e]+ow
cat2.say(); //Dot the Cat says M[e]+ow
alert(cat instanceof Cat) // True
alert(cat instanceof Dog) // False
alert(cat instanceof Animal) // True
Это скрипт robhruska , немного очищенный:
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat "$file" >> tmp_file
mv -f tmp_file "$file"
done
Я удалил wc
, cut
, ls
и эхо
там, где они не нужны. Я изменил некоторые имена файлов, чтобы сделать их более значимыми. Я разбил его на несколько строк только для того, чтобы его было легче читать.
Если хотите, можете использовать mktemp
или tempfile
, чтобы создать временное имя файла вместо используя жестко запрограммированный.
Редактировать
Используя GNU split
, можно сделать следующее:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
Разбито для удобства чтения:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
Когда - filter
указано, split
запускает команду (в данном случае функция, который должен быть экспортирован) для каждого выходного файла и устанавливает для переменной FILE
в среде команды имя файла.
Сценарий или функция фильтра могут выполнять любые манипуляции с выходным содержимым или даже имя файла. Примером последнего может быть вывод в фиксированное имя файла в каталоге переменных: > "$ FILE / data.dat"
например.
Я новичок, когда дело касается Баш-фу, но мне удалось придумать это чудовище с двумя командами. Я уверен, что есть более элегантные решения.
$> tail -n +2 file.txt | split -l 4
$> for file in `ls xa*`; do echo "`head -1 file.txt`" > tmp; cat $file >> tmp; mv -f tmp $file; done
Предполагается, что ваш входной файл - file.txt
, вы не используете аргумент префикса
для split
, и вы работаете в каталоге, в котором нет других файлов, начинающихся с формата вывода по умолчанию xa *
split
. Также замените "4" желаемым размером линии разделения.
Это более надежная версия сценария Дениса Уильямсона . Скрипт создает множество временных файлов, и было бы обидно, если бы они остались лежать без дела, если запуск был неполным. Итак, давайте добавим захват сигнала (см. http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html , а затем http://tldp.org/LDP/ abs / html / debugging.html ) и удалите наши временные файлы; в любом случае это лучшая практика.
trap 'rm split_* tmp_file ; exit 13' SIGINT SIGTERM SIGQUIT
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat $file >> tmp_file
mv -f tmp_file $file
done
Замените «13» любым кодом возврата. О, и вам, вероятно, в любом случае следует использовать mktemp (как некоторые уже предлагали), так что продолжайте и удалите 'tmp_file' из rm в строке прерывания. Дополнительные сигналы для перехвата смотрите на странице руководства по сигналам.
Я никогда не уверен в правилах копирования скриптов прямо с чужих сайтов, но Geekology предлагает хороший скрипт, чтобы делать то, что вы хотите, с несколькими подтверждающими комментариями что это работает. Обязательно выполните tail
-n
+2
, как указано в комментарии внизу.
Вы можете использовать [mg] awk:
awk 'NR==1{
header=$0;
count=1;
print header > "x_" count;
next
}
!( (NR-1) % 100){
count++;
print header > "x_" count;
}
{
print $0 > "x_" count
}' file
100 - это количество строк в каждом срезе. Он не требует временных файлов и может быть помещен в одну строку.