-2

我有一个带有列表的文件,称之为tbl.lst

a
b
c
d
e

我想创建一个输出文件,其中的项目用括号括起来并用逗号分隔。有人可以告诉我如何在 Perl 中做到这一点吗?

预期输出:

MYTABLES=(a,b,c,d,e)
4

3 回答 3

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 脚本中的每个空格都是可选的(但空格可能更清晰)。

于 2013-09-17T05:40:07.903 回答
1

该脚本将用作过滤器:读取文件并将结果打印到标准输出,如下所示:

./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";
于 2013-09-17T05:27:27.797 回答
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)
于 2013-09-17T05:41:25.507 回答