Perl поможет объединить записи и вставить символы - PullRequest
1 голос
/ 15 октября 2010

Новичок Perl здесь ... ищет помощь в переформатировании файла данных.

Данные выглядят так:

num:3460381591 
num:1038198413 
num:3380733973

Я хотел бы сделать это одной строкой, а затем добавлять каждый начало записи с ^a и ^b после двоеточия, например:

^anum:^b3460381591^anum:^b1038198413^anum:^b3380733973

Может кто-нибудь показать мне, как это сделать? Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 октября 2010

Если Perl не обязателен,

$ awk -F":" '{$1="^a"$1;$2="^b"$2}1' OFS=":" ORS="" file
^anum:^b3460381591^anum:^b1038198413^anum:^b3380733973

еще

perl -F":" -ane 'chomp($F[1]);$F[0]="^a$F[0]";$F[1]="^b$F[1]"; print join ":", @F ' file

Или как насчет этого?

perl -ne 'chomp; s/^/^a/;s/:/:^b/;print' file
2 голосов
/ 15 октября 2010

Простой способ:

#!/usr/bin/perl -p

s/^(\w+):(.*?)\s*$/^a$1:^b$2/;

Или, если вы хотите отредактировать файл на месте (и сделать резервную копию исходного файла на месте):

#!/usr/bin/perl -pi.BAK

s/^(\w+):(.*?)\s*$/^a$1:^b$2/;

Конечно, вы также можете запускать их как однострочные:

perl -p -e 's/^(\w+):(.*?)\s*$/^a$1:^b$2/;' filename
perl -pi.BAK -e 's/^(\w+):(.*?)\s*$/^a$1:^b$2/;' filename

Подробнее см. perldoc perlrun .

2 голосов
/ 15 октября 2010
my $str = '';

open FILE, "file";
while (<FILE>) {
    chomp;
    my ($k, $v) = split /:/;
    $str .= "^a$k:^b$v";
}
close FILE;

print "$str\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...