📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 01:49 |
Есть некий дамп:
word1|some_text_KEY_some_text_KEY_some_text_KEY_some...
word2|some_text_KEY_some_text_KEY_some_text_KEY_some...
word3|some_text_KEY_some_text_KEY_some_text_KEY_some...
wordN|some_text_KEY_some_text_KEY_some_text_KEY_some...
Надо в каждой отдельной строке заменить все 3 её KEY на то слово word1,word2,..wordN, что стоит в начале этой строки! word(n-e) отделяетя символом |, их можно только идентифицировать только как jn началf строки до '|'.
Должно получиться:
word1|some_text_word1_some_text_word1_some_text_word1_some...
word2|some_text_word2_some_text_word2_some_text_word2_some...
...
ПС Еслиб дамп был в пределах 10к, то я бы попробовал справиться обычным редактором, например ST2, но дамп, скажем так, крупнее на порядок! ;)
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 16/01/14 в 02:18 |
emeditor хоть в гиг дамп откроет. Там же реплейс можно на регулярке построить.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
7
|
|
|
Продаю домены, принимаю wm, ec
С нами с 23.03.03
Сообщения: 2094
Рейтинг: 1035
|
Добавлено: 16/01/14 в 10:10 |
S_Flash писал: |
ПС Еслиб дамп был в пределах 10к, то я бы попробовал справиться обычным редактором, например ST2, но дамп, скажем так, крупнее на порядок! ;) |
Простенький пхп скрипт сделает это за пару минут.
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 11:43 |
Stek писал: | emeditor хоть в гиг дамп откроет. Там же реплейс можно на регулярке построить. |
Тут не совсем тривиальный Search and Replace.. В каждой строке индивидуальный replace.
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 11:49 |
XiVa: Как мне кажется php немного для других целей создавался. Локально на винду его как cli вроде как не ставят. В серверном исполнении такой скрипт будет неинтересен, так как будет серьёзно жрать память и иметь огромное, в понимании скрипта, время исполнения. (Т.е. на лету это будет некомильфо). Это типо как ножичком раскручивать ноутбук вместо отвёртки, вроде как шурупы выкручиваются, а рано или поздно понимаешь, что что-то не то! ;)
Будь я на линуксе я бы задействовал лучше баш. Под виндой аналога баша я не знаю. Вот я и подумал, что эту работу красиво и быстро выполнит sed, тем более это его прямое назначение.
|
|
|
|
С нами с 03.07.07
Сообщения: 481
Рейтинг: 862
|
Добавлено: 16/01/14 в 11:54 |
Эту операцию разово нужно выполнить или она с какой-то периодичесностью должна быть?
Если разово - то на пыхе тут написать, выполнить и забыть. Если периодически - ну питон к примеру. Меньше памяти будет отъедать.
|
|
|
|
С нами с 13.08.03
Сообщения: 533
Рейтинг: 481
|
Добавлено: 16/01/14 в 11:58 |
Это не для sed..
На AWK можно - как раз под него задача, распарсить входные поля, перетусовать-пересчитать-поменять все и потоком же выплюнуть, на построчную скоростную обработку как раз заточен, в любом *nix есть.
Но синтаксис достаточно своеобразный, и если разовая задача - легче действительно на пхп набросать и на пережевывание отдать, чай пойти пить
|
|
|
|
Продаю домены, принимаю wm, ec
С нами с 23.03.03
Сообщения: 2094
Рейтинг: 1035
|
Добавлено: 16/01/14 в 14:26 |
Цитата: | XiVa: Как мне кажется php немного для других целей создавался. |
Да не пох. ли, для чего он создавался, тебе шашечки или ехать? Читай из файла построчно, пиши лог, чтобы в случае перезагрузки не с начала стартовать и все, сойдет любой шаред хостинг.
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 15:22 |
XiVa: И шашечки и ехать.. Где мне взять сервер с php для единоразовой задачи?
|
|
|
|
Я держусь там. Счастья мне, уд
С нами с 24.05.05
Сообщения: 16096
Рейтинг: 219
|
Добавлено: 16/01/14 в 17:27 |
S_Flash писал: | Есть некий дамп:
word1|some_text_KEY_some_text_KEY_some_text_KEY_some...
word2|some_text_KEY_some_text_KEY_some_text_KEY_some...
word3|some_text_KEY_some_text_KEY_some_text_KEY_some...
wordN|some_text_KEY_some_text_KEY_some_text_KEY_some...
Надо в каждой отдельной строке заменить все 3 её KEY на то слово word1,word2,..wordN, что стоит в начале этой строки! word(n-e) отделяетя символом |, их можно только идентифицировать только как jn началf строки до '|'.
Должно получиться:
word1|some_text_word1_some_text_word1_some_text_word1_some...
word2|some_text_word2_some_text_word2_some_text_word2_some...
...
ПС Еслиб дамп был в пределах 10к, то я бы попробовал справиться обычным редактором, например ST2, но дамп, скажем так, крупнее на порядок! ;) |
KEY одинаковый везде?
|
|
Здесь не место для бесед: грохот на пределе
Как при старте ста ракет, как девятый вал
|
1
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 17:51 |
Оборотень писал: | KEY одинаковый везде? |
ага и заменить надо в каждой строчке на одинаковое для этой строки
|
|
|
|
С нами с 13.08.03
Сообщения: 533
Рейтинг: 481
|
Добавлено: 16/01/14 в 18:34 |
S_Flash писал: | ага и заменить надо в каждой строчке на одинаковое для этой строки |
ну так первое в этой строке и будет $1
awk {$1....}
валяй-валяй, изучай - неужто думаешь предки дурнее нас были и с подобными задачами не сталкивались, с перетусовкой-переделкой полей в простом текстовом файле ??
потомки обленились, дай сразу готовый рецепт для андроида - а чуть подумать и сгруппировать комманды в поток..
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 16/01/14 в 18:48 |
dm: Я когда увидел твой набор дисков с OS Linux сразу понял, что для тебя нет ничего невозможного в консоли!
Дай, хоть на чуток расслабиться!
Пошёл учить awk ...
|
|
|
|
С нами с 03.07.07
Сообщения: 481
Рейтинг: 862
|
Добавлено: 16/01/14 в 20:46 |
Код: [развернуть] |
<?
$infile = 'in.txt';
$outfile = 'out.txt';
$inarray = file($infile);
$keymask = 'KEY';
$outhandle = fopen($outfile, 'w');
foreach ($inarray as $instring)
fwrite($outhandle, str_ireplace($keymask, substr($instring, 0, stripos($instring, '|')), $instring));
fclose($outhandle);
?>
|
конечно KEY должен быть уникальным вхождением в каждую строку. иначе лишнего назаменяться может
|
|
|
|
С нами с 03.07.07
Сообщения: 481
Рейтинг: 862
|
Добавлено: 16/01/14 в 21:11 |
Код: [развернуть] |
<?
$infile = 'in.txt';
$outfile = 'out.txt';
$content = file_get_contents($infile);
$keymask = 'KEY';
$gpos = 1;
$newcontent = '';
while($gpos)
{
$fpos = stripos($content, "|", $gpos);
if ($fpos)
{
$wordN = trim(substr($content, $gpos-1, $fpos-$gpos+1));
$lpos = stripos($content, "\n", $fpos);
if (!$lpos)
$lpos = strlen($content);
$sentence = trim(substr($content, $fpos+1, $lpos-$fpos-1));
$newsentence = str_ireplace($keymask, $wordN, $sentence);
$newcontent .= $wordN."|".$newsentence."\n";
$gpos = $lpos;
} else
break;
}
file_put_contents($outfile, $newcontent);
?>
|
то же самое если не использовать массивы и регулярки. в теории должно отъесть меньше памяти и работать быстрее
|
|
|
|
С нами с 14.11.05
Сообщения: 56
Рейтинг: 177
|
Добавлено: 16/01/14 в 23:03 |
awk
Код: [развернуть] | awk -F'|' 'BEGIN { OFS="|" } { gsub(/KEY/, $1, $2); print $1,$2 }' input.txt |
Семок тому, кто напишет на sed.
|
|
|
|
С нами с 22.05.09
Сообщения: 639
Рейтинг: 1087
|
Добавлено: 17/01/14 в 02:16 |
file.txt
Цитата: | word1|some_text_KEY_some_text_KEY_some_text_KEY_some...
word2|some_text_KEY_some_text_KEY_some_text_KEY_some...
word3|some_text_KEY_some_text_KEY_some_text_KEY_some... |
Код: [развернуть] | sed -i -e 's/\(.*\)\(|.*\)KEY\(.*\)KEY\(.*\)KEY\(.*\)/\1\2\1\3\1\4\1\5/' file.txt |
|
|
|
|
С нами с 13.08.03
Сообщения: 533
Рейтинг: 481
|
Добавлено: 17/01/14 в 07:32 |
О !
стоило чуть подначить
|
|
|
|
С нами с 03.07.07
Сообщения: 481
Рейтинг: 862
|
Добавлено: 17/01/14 в 13:08 |
Дада. Чуть подрочить всегда стоит
|
|
|
|
С нами с 13.08.03
Сообщения: 533
Рейтинг: 481
|
Добавлено: 17/01/14 в 18:09 |
ну, у кого что болит..
"жениться вам надо, барин" (c)
и с классиками русской литературы - не спорь
|
|
|
|