@PerlNecroHacker

Как дописать в строку много строк из другого файла..?

Здравствуйте! Задача следующая. Есть некая строка. И есть некий .txt файл, который лежит в /home.

Необходимо, в определенном месте этой строки построчно начать записывать данные из .txt файла, и по окончанию создать файлик, в котором будет... ну примерно так.
Попытаюсь объяснить наглядно.

есть строка: 45788-4rbf-77458-ik-90-98

и есть

.txt файл, который содержит:
@96
@97
@98
@99
@100

... и так далее.

Необходимо: чтобы данные из .txt файла были записаны в строке, ну, например в этом месте:
45788-4rbf-77458-ik-90-98
-------------^

и по завершению операции получить файл, который бы содержал вот это:

45788-4rbf@96-77458-ik-90-98
45788-4rbf@97-77458-ik-90-98
45788-4rbf@98-77458-ik-90-98
45788-4rbf@99-77458-ik-90-98
45788-4rbf@100-77458-ik-90-98
и так далее.

Спасибо большое, заранее!

Если можно, пожалуйста, на перле. Отдаю предпочтение именно этому языку.
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
$ str="45788-4rbf-77458-ik-90-98"
$ cat IN.txt
@96
@97
@98
@99
@100 

$ str1=$(echo $str|awk -F- '{print $1"-"$2}')
$ str2=$(echo $str|awk -F- '{print $3"-"$4"-"$5"-"$6}')
$ awk '{print "'$str1'"$0"-'$str2'"}' IN.txt > OUT.txt

$ cat OUT.txt
45788-4rbf@96-77458-ik-90-98
45788-4rbf@97-77458-ik-90-98
45788-4rbf@98-77458-ik-90-98
45788-4rbf@99-77458-ik-90-98
45788-4rbf@100-77458-ik-90-98


если str, str1,str2 фиксированные то можно и упростить:
$ awk '{print "45788-4rbf"$0"-77458-ik-90-98"}' IN.txt > OUT.txt
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@estj
prepodavatel Vuza po background programming
в vim - e , запущенном на ваш тхт файл -- совсем просто:
Сидя в первой строке тхт -шного файла, задаём команду:

:.,$s/^/45788-4rbf//gp

это замена ( от substitute, а . И , -- это местА -- от тек мЕста до конца файла) начала строки,
потом вверх и повторить, но уже замена в конец каждой строки -- :

1G
:.,$s/$/-77458-ik-90-98//gp

это из школьного курса по регулярным выражениям и по редактору vim
Ответ написан
Комментировать
Python:
with open('D:\dest.txt', 'a') as dest:
	with open('D:\list.txt', 'r') as file:
		for line in file.readlines():
			line = line.replace('\n','')
			dest.write('45788-4rbf{}-77458-ik-90-98\n'.format(line))
Ответ написан
akzhan
@akzhan
use Modern::Perl;

use Readonly;
use File::Slurper qw( read_text write_text );

Readonly my $STR     => "45788-4rbf-77458-ik-90-98";
Readonly my $OFFSET  => 10;
Readonly my $INFILE  => "/home/in.txt";
Readonly my $OUTFILE => "/home/out.txt";

my @insertions = split( m/\n/, read_text(INFILE) );

my $result = '';
for my $insertion ( @insertions ) {
    $result .= substr($STR, 0, $OFFSET). $insertion. substr($STR, $OFFSET). "\n";
}

# а можно так
my $result = join("\n", map {
    substr($STR, 0, $OFFSET). $_. substr($STR, $OFFSET)
} @insertions;


write_text(OUTFILE, $result);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы