如何仅在空格分隔文件中打印某些字段?

Muh*_*edy 6 perl split field

我有一个文件包含以下格式的以下内容1000行:

abc def ghi gkl

如何编写Perl脚本以仅打印第一个和第三个字段?

abc ghi

cod*_*lic 14

如果没有答案对你有好处,我会尽力获得赏金;-)

#!/usr/bin/perl
# Lines beginning with a hash (#) denote optional comments,
# except the first line, which is required,
# see http://en.wikipedia.org/wiki/Shebang_(Unix)

use strict;   # http://perldoc.perl.org/strict.html 
use warnings; # http://perldoc.perl.org/warnings.html

# http://perldoc.perl.org/perlsyn.html#Compound-Statements
# http://perldoc.perl.org/functions/defined.html
# http://perldoc.perl.org/functions/my.html
# http://perldoc.perl.org/perldata.html
# http://perldoc.perl.org/perlop.html#I%2fO-Operators
while (defined(my $line = <>)) {
    # http://perldoc.perl.org/functions/split.html
    my @chunks = split ' ', $line;
    # http://perldoc.perl.org/functions/print.html
    # http://perldoc.perl.org/perlop.html#Quote-Like-Operators
    print "$chunks[0] $chunks[2]\n";
}
Run Code Online (Sandbox Code Playgroud)

要运行此脚本,script.pl请将其命名为

perl script.pl FILE
Run Code Online (Sandbox Code Playgroud)

FILE您要解析的文件在哪里.另见http://perldoc.perl.org/perlrun.html.祝好运!;-)


mob*_*mob 13

perl -lane 'print "@F[0,2]"' file
Run Code Online (Sandbox Code Playgroud)

  • -a 隐式设置 -n 所以你实际上不需要 n 。所以 perl -lae 就足够了。但无论如何最好的答案在这里 (2认同)

T.E*_*.D. 13

对于像perl这样强大的东西来说,这真的是一种浪费,因为你可以在一个简单的awk行中做同样的事情.

awk '{ print $1 $3 }'

  • @codeholic,如果OP*知道*Perl,他们就不会问这个问题.使用Perl就像使用热核弹头试图杀死苍蝇一样.这个答案+1. (6认同)
  • 当你了解Perl时,这是浪费时间学习`awk`. (5认同)

Sin*_*nür 9

while ( <> ) {
    my @fields = split;
    print "@fields[0,2]\n";
}
Run Code Online (Sandbox Code Playgroud)

而且只是为了变化,在Windows上:

C:\Temp> perl -pale "$_=qq{@F[0,2]}"
Run Code Online (Sandbox Code Playgroud)

在Unix上

$ perl -pale '$_="@F[0,2]"'
Run Code Online (Sandbox Code Playgroud)