リストを含むファイルがあります。それを呼び出しますtbl.lst:
a
b
c
d
e
項目を括弧で囲み、コンマで区切った出力ファイルを作成したいと考えています。誰かが Perl でこれを行う方法を教えてもらえますか?
期待される出力:
MYTABLES=(a,b,c,d,e)
    リストを含むファイルがあります。それを呼び出しますtbl.lst:
a
b
c
d
e
項目を括弧で囲み、コンマで区切った出力ファイルを作成したいと考えています。誰かが Perl でこれを行う方法を教えてもらえますか?
期待される出力:
MYTABLES=(a,b,c,d,e)
    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 スクリプトのすべてのスペースはオプションです (ただし、スペースの方がわかりやすいでしょう)。
このスクリプトはフィルターとして機能します。ファイルを読み取り、次のように結果を 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";
    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)