>" 的最佳方法是什么? $1}'文件”在 Perl 一行中?" />

转换 "awk '{print $2 >>" 的最佳方法是什么? $1}'文件”在 Perl 一行中?

发布于 2024-09-25 20:56:28 字数 209 浏览 2 评论 0 原文

我怎样才能转换:

awk '{print $2 >> $1}' file

用简短的 Perl 一行代码?

“文件”可能如下所示:

水果香蕉
蔬菜甜菜根
蔬菜胡萝卜
蘑菇鸡油菌
水果苹果

How could I convert:

awk '{print $2 >> $1}' file

in a short Perl one-liner?

"file" could look like this:

fruit banana
vegetable beetroot
vegetable carrot
mushroom chanterelle
fruit apple

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一绘本一梦想 2024-10-02 20:56:28

可能还有其他方法,但这就是我能想到的

perl -ane 'open(FILE,">>",$F[0]); print FILE $F[1];close(FILE);' file

there may some other ways, but here's what i can think of

perl -ane 'open(FILE,">>",$F[0]); print FILE $F[1];close(FILE);' file
陌路终见情 2024-10-02 20:56:28

我想 awk 在某些事情上必须做得更好:-)

这正是我在命令行上所做的极限,但它避免了重新打开文件句柄。

$ perl -lane '$fh{$F[0]} || open $fh{$F[0]}, ">>", $F[0]; print {$fh{$F[0]}} $F[1]' file

I guess awk has to be better at some things :-)

This is right at the limit of what I'd do on the command line, but it avoids reopening filehandles.

$ perl -lane '$fh{$F[0]} || open $fh{$F[0]}, ">>", $F[0]; print {$fh{$F[0]}} $F[1]' file
陌伤ぢ 2024-10-02 20:56:28

不是纯粹的 Perl,但你可以这样做:

perl -nae '`echo $F[1] >> $F[0]`' input_file

Not pure Perl, but you can do:

perl -nae '`echo $F[1] >> $F[0]`' input_file
謌踐踏愛綪 2024-10-02 20:56:28

这就是a2p <<< '{打印$2>> $1}' 产生

#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
    if $running_under_some_shell;
                        # this emulates #! processing on NIH machines.
                        # (remove #! line above if indigestible)

eval '
.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
                        # process any FOO=bar switches

$, = ' ';               # set output field separator
$\ = "\n";              # set output record separator

while (<>) {
    ($Fld1,$Fld2) = split(' ', $_, -1);
    &Pick('>>', $Fld1) &&
        (print $fh $Fld2);
}

sub Pick {
    local($mode,$name,$pipe) = @_;
    $fh = $name;
    open($name,$mode.$name.$pipe) unless $opened{$name}++;
}

This is what a2p <<< '{print $2 >> $1}' produces

#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
    if $running_under_some_shell;
                        # this emulates #! processing on NIH machines.
                        # (remove #! line above if indigestible)

eval '
.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
                        # process any FOO=bar switches

$, = ' ';               # set output field separator
$\ = "\n";              # set output record separator

while (<>) {
    ($Fld1,$Fld2) = split(' ', $_, -1);
    &Pick('>>', $Fld1) &&
        (print $fh $Fld2);
}

sub Pick {
    local($mode,$name,$pipe) = @_;
    $fh = $name;
    open($name,$mode.$name.$pipe) unless $opened{$name}++;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文