数行のファイルがあります。すべての行を区切り記号で結合し、最後の行を削除します。
perlでは動作しません。しかし、sedで作業しています。これを perl で動作させるのを手伝ってくれませんか?
cat a
a
b
c
d
cat a |perl -lane 'printf("%s|",$_)' |perl -lane 's/|$//;print'
a|b|c|d|
cat a |perl -lane 'printf("%s|",$_)' |sed 's/|$//'
a|b|c|d
数行のファイルがあります。すべての行を区切り記号で結合し、最後の行を削除します。
perlでは動作しません。しかし、sedで作業しています。これを perl で動作させるのを手伝ってくれませんか?
cat a
a
b
c
d
cat a |perl -lane 'printf("%s|",$_)' |perl -lane 's/|$//;print'
a|b|c|d|
cat a |perl -lane 'printf("%s|",$_)' |sed 's/|$//'
a|b|c|d
なぜ追加してから削除するのですか?
perl -pe'chomp; $_="|$_" if $. > 1; END { print "\n"; }'
ところで、
cat file | perl -e'...' # Useless use of cat
次のように書くことができます
perl -e'...' <file
また、提供されているすべてのソリューションはARGVから読み取られるため、リダイレクトを削除してファイル名を引数として渡すこともできます。
perl -e'...' file
楽しみのために、ゴルフ:
perl -pE'chomp;$.>1&&s/^/|/;END{say""}' # Based on mine
perl -nlE'push@L,$_}{$"="|";say"@L"' # Based on JRF's
perl -E'chomp(@L=<>);say join"|",@L'
perl -0777pe's/\n(?!\z)/|/g'
最初のものだけがメモリを浪費しません。最後のものがおそらく最速です。
参加すると、これは簡単になります。あなたができること:
cat a | perl -lne'push @lines,$_;END{print join "|", @lines}'
...しかし、あなたは役に立たないcat賞を獲得するので、それを次のように減らします:
perl -lne'push @lines,$_;END{print join "|", @lines}' a
a|b|c|d
逃げてみて、
cat a |perl -lane 'printf("%s|",$_)' |perl -lane 's/\|$//;print'
Perl は を検索置換と見なし|ますor。