2010-10-14 71 views
1

Perl新手在這裏...尋找幫助重新格式化數據文件。perl幫助加入記錄並插入字符

的數據是這樣的:

num:3460381591 
num:1038198413 
num:3380733973 

我想使它一個字符串,然後冒號這樣後REC每次啓動追加與^a^b

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

燦有人告訴我如何做到這一點?謝謝。

回答

2
my $str = ''; 

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

print "$str\n"; 
+0

謝謝!效果很好。 – jdamae 2010-10-15 00:05:18

+0

你能告訴我'。='在做什麼嗎? – jdamae 2010-10-15 00:06:43

+0

「$ a。= $ b」是「$ a = $ a。$ b」的快捷方式 - 即將$ b附加到已經在$ a中的任何內容的末尾。 – 2010-10-15 00:10:08

3

如果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 
+0

這裏有一個更多的方法:'perl -ne'chomp; S/^([^:] +:)/^A $ 1^B /;打印} {打印「\ n」'文件' – jfs 2010-10-15 01:03:43

+0

謝謝你們!有很多方法可以做到這一點。 – jdamae 2010-10-15 17:56:12

2

一個簡單的方法:

#!/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

+0

我也喜歡這個。 – jdamae 2010-10-15 17:55:35