На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 10.06.2010 21:05
Cуществует файл со следующим содержанием:
Как и с помощью чего можно более рационально получить на выходе
Код: Выделить всё
abcd:123
sdsd:123
wewe:123
bggggg:123
sdsd:123
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
watashiwa_daredeska » 10.06.2010 21:20
Если добавляется фиксированная строка, то
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 11.06.2010 13:48
PS:
можно ещё на месте:
sed '...' -i file.txt
или
sed '...' -i*.bak file.txt
(последний вариант с бекапом)
radial
Сообщения: 577
ОС: OpenSUSE
Сообщение
radial » 11.06.2010 17:30
Конечно же так: загружаем файл в массив, обрабатываем элементы и записываем массив в файл.
бла-бла-бла, зато прикольно
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 11.06.2010 19:13
radial писал(а): ↑ 11.06.2010 17:30
Конечно же так: загружаем файл в массив, обрабатываем элементы и записываем массив в файл.
бла-бла-бла, зато прикольно smile.gif
опять меня не поняли :(
sed - это
потоковый редактор , он обрабатывает файлы построчно. sed может легко и быстро прогнать файл в 100Гб на компьютере с 512Мб памяти - я так неоднократно делал. Причём время работы sed в этом случае равно 0 (нулю) - копирование работает с той-же скоростью.
можете и в массив - если вам нечего делать. сомневаюсь, что у вас это получится лучше.
radial
Сообщения: 577
ОС: OpenSUSE
Сообщение
radial » 11.06.2010 19:27
мне просто нравится эта фича bash
(зато можно дописать в середину файла, поменять строки местами,..)
конечно, на для этого примера- не лучший вариант.
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE
Сообщение
t.t » 11.06.2010 19:54
Это много для чего не лучший вариант. Как минимум, нужно знать, что размер файла строго ограничен.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
gluk47
Сообщения: 297
Статус: Любитель гвоздей и микроскопов
ОС: Kubuntu 17.10
Сообщение
gluk47 » 11.06.2010 20:07
Не знаю, в эту ли тему...
Но очень интересует вопрос:
Есть файл data.txt с какими-то строками и файл labels.txt (по одному числу на строку), в каждом файле от 700 тысяч строк.
Нужно в конец каждой строки файла data.txt дописать число из соответствующей строки labels.txt
Как это сделать? Я, к сожалению, могу придумать только извращённейшие варианты вроде
Код: Выделить всё
i=0
cat data.txt|while read DATA; do
LABEL=`head -$i labels.txt|tail -1`
echo "$DATA $LABEL">labeled_data.txt
(( i++ ))
done
Как запустить параллельное чтение в одном цикле строк из двух файлов?
[gluk47@gluk47-desktop ~]$ ензу куищще
куищще is aliased to `reboot'
/dev/random
Администратор
Сообщения: 5488
ОС: Gentoo
Сообщение
/dev/random » 11.06.2010 20:38
man paste ?
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
watashiwa_daredeska » 11.06.2010 20:40
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 11.06.2010 22:54
radial писал(а): ↑ 11.06.2010 19:27
зато можно дописать в середину файла, поменять строки местами
sed -i '666abc'
допишет после 666й строки
sed -i '666{ h; n; p; g }'
sed -ri '666{ N; s/(.*)\n(.*)/\2\n\1 }'
эти поменяют 666ю и 667ю
gluk47 писал(а): ↑ 11.06.2010 20:07
Я, к сожалению, могу придумать только извращённейшие варианты вроде
конечно paste!
но вот вам вариант на sed, ненамного медленнее, и может решить похожие задачи:
Код: Выделить всё
sed 'R num.txt' include.lst | sed 'N; s/\n/ /'