开发者

Is there a Perl substitute for the cut and paste shell commands?

I saw once a quick and dirty Perl implementation for the cut and paste linux commands. It was something like perl 'print "$F1"' filename to substitute a cut -f1 filename command

Can someone tell me how was this Perl way? Specifically, I'm interested b开发者_运维技巧ecause this, unlike cut/paste, will work the same also in Windows environments.


Do you know about the Perl Power Tools? They are implementations of your favorite unix commands, but done in Perl. If you have Perl, you can have your favorite commands without acrobatics on the command line. PPT has both cut and paste.

Although many people pointed you to some perl switches, they forget to link to perlrun which explains them all.


cut

perl -alpe'$_=$F[0]'
perl -alpe'$_="@F[1..3]"'

To give a custom input separator,

perl -F: -alpe'$_=$F[0]'

To change the output separator,

perl -F: -alpe'$"=":";$_="@F[1..3]"'

To grep while you're at it,

perl -alne'print$F[0]if/blah/'

paste

Not quite as easy.

#!/usr/bin/perl
for (@ARGV ? @ARGV : qw(-)) {
    if ($_ eq '-') {push @files, *STDIN}
    else {open $files[@files], '<', $_}
}
while (grep defined, (@lines = map scalar <$_>, @files)) {
    chomp @lines;
    print join("\t", @lines), "\n";
}


For cut: I think you are looking for the perl -ane solution (the -e executes the following code, the -an applies @F = split (/\t/,$line) to every line in the file). So something like:

perl -ane 'print "$F[0]\t$F[1]\n"' file

which is identical to:

cut -f1,2 file

For paste, I'm not sure how you can do this, but I think the perl -ane can take multiple files as input.


Perl equivalent of cut -c1-2

perl -alne 'print substr($_,0,2)'

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜