PDA

Показать полную графическую версию : [решено] Нужен скрипт или метод который вставит строки в текстовый файл


cyberp1983
09-05-2016, 06:28
Есть каталог c:\basa с текстовым файлом numbers.txt
В файле база номеров (680000), каждый с новой строки.
Нужно вставить номер 12345678910(изменяемый) на каждую 25(изменяемое значение) строку этого файла.
Заранее СПАСИБО!!

greg zakharov
09-05-2016, 09:47
Быстрее и проще все это решить с помощью sed:
sed '0~25 s/.*/12345678910/g' < numbers.txt > numbers_edited.txt
Пример выше заменит каждую 25-ую строку значением 12345678910, а вывод перенаправит в файл numbers_edited.txt.
То же, но с помощью PowerShell:
gc .\numbers.txt -r 25|%{if ($_.Length -eq 25) {$_ -replace $_[-1], '12345678910'} else {$_}} | Out-File numbers_edited.txt -enc default
Правда стоит отметить довольно медленную скорость работы PowerShell по сравнению с тем же sed.

Foreigner
09-05-2016, 10:01
@echo off

pushd "d:\basa"
sed "0~24 s/$/\n1234567890/g" numbers.txt > numbers.tmp
move numbers.tmp numbers.txt
popd


Sed (http://gnuwin32.sourceforge.net/packages/sed.htm)

cyberp1983
09-05-2016, 11:05
basa »
Остаётся пустой текстовый файл

numbers_edited.txt. »
файл пустой

То же, но с помощью PowerShell: »
Ничего не произошло, файл не создался

Foreigner
09-05-2016, 11:17
cyberp1983, А Sed есть? Я ссылку на утилиту дал.

cyberp1983
09-05-2016, 11:26
cyberp1983, А Sed есть? Я ссылку на утилиту дал. »
я в этом 2 по 5) утилиту скачал... установил... а куда сам код? в батник?

Foreigner
09-05-2016, 11:34
а куда сам код? в батник? »
Это батник и есть...

cyberp1983
09-05-2016, 11:40
Это батник и есть... »
создаёт пустой файл

Foreigner
09-05-2016, 11:47
Значит вы что-то делаете не так. Мне сложно сказать, т.к. я не знаю, как вы установили sed. У меня все работает.

cyberp1983
09-05-2016, 12:03
не знаю, как вы установили sed. »
По вашей ссылке скачал "Complete package, except sources Setup" и установил

Foreigner
09-05-2016, 12:18
Тогда не знаю, возможно каталог с sed не прописан в PATH и батник его не видит. Попробуйте указать полный путь к утилите или добавить ее каталог в PATH:

@echo off
setlocal

set "path=%path%;C:\Путь\к\Папке где sed.exe"

pushd "d:\basa"
sed "0~24 s/$/\n1234567890/g" numbers.txt > numbers.tmp
move numbers.tmp numbers.txt
popd

cyberp1983
09-05-2016, 12:51
@echo off
setlocal
set "path=%path%;C:\Путь\к\Папке где sed.exe"
pushd "d:\basa"
sed "0~24 s/$/\n1234567890/g" numbers.txt > numbers.tmp
move numbers.tmp numbers.txt
popd »


Спасибо БОЛЬШОЕ! Работает!




© OSzone.net 2001-2012