使用Perl读取列表并格式化为自定义输出文件

时间:2013-09-17 05:20:20

标签: perl

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

a
b
c
d
e

我想创建一个输出文件,其中的项目括在括号中并用逗号分隔。有人可以告诉我如何在Perl中执行此操作吗?

预期产出:

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

3 个答案:

答案 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)