我有一个带有列表的文件,称之为tbl.lst
:
a
b
c
d
e
我想创建一个输出文件,其中的项目括在括号中并用逗号分隔。有人可以告诉我如何在Perl中执行此操作吗?
预期产出:
MYTABLES=(a,b,c,d,e)
答案 0 :(得分:3)
perl -lne 'push @A, $_; END { print "MYTABLES=(", join(",", @A), ")";}' tbl.lst
给定输入文件tbl.lst
:
a
b
c
d
e
输出结果为:
MYTABLES=(a,b,c,d,e)
Perl脚本中的每个空格都是可选的(但空格可能更清楚。)
答案 1 :(得分:1)
此脚本将用作过滤器:读取文件并将结果打印到stdout,如下所示:
./script file
我们走了:
#!/usr/bin/perl
while (<>) {
s/\r|\n//g; # On any platform, strip linefeeds on any (other) platform
push @items, $_
}
print "MYTABLES=(";
while (@items) {
$item = shift @items;
print $item;
print @items ? "," : ")\n";
}
如果输入文件非常大,您可能希望避免将其读入列表,而是严格按行工作。然后诀窍是在项目之前打印分隔符。
print "MYTABLES=";
while (<>) {
print $first_printed ? "," : "(";
s/\r|\n//g; # On any platform, strip linefeeds on any (other) platform
print;
$first_printed = 1;
}
print ")\n";
答案 2 :(得分:0)
awk 'NR!=1{a=a","}{a=a$0}END{print "MYTABLES=("substr(a,0,length(a))")"}' your_file >output.txt
测试如下:
> cat temp
a
b
c
d
e
> awk 'NR!=1{a=a","}{a=a$0}END{print "MYTABLES=("substr(a,0,length(a))")"}' temp
MYTABLES=(a,b,c,d,e)