我有一个文件,其中包含以下格式的以下内容1000行:
abc def ghi gkl
如何编写Perl脚本以仅打印第一个和第三个字段?
abc ghi
答案 0 :(得分: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";
}
要运行此脚本,假定其名称为script.pl
,请将其作为
perl script.pl FILE
其中FILE
是您要解析的文件。另见http://perldoc.perl.org/perlrun.html。祝好运! ; - )
答案 1 :(得分:13)
perl -lane 'print "@F[0,2]"' file
答案 2 :(得分:13)
对于像perl这样强大的东西来说,这真的是一种浪费,因为你可以在一个简单的awk行中做同样的事情。
awk '{ print $1 $3 }'
答案 3 :(得分:9)
while ( <> ) {
my @fields = split;
print "@fields[0,2]\n";
}
仅适用于各种各样的Windows:
C:\Temp> perl -pale "$_=qq{@F[0,2]}"
并在Unix上
$ perl -pale '$_="@F[0,2]"'
答案 4 :(得分:4)
如perl one-liner:
perl -ane 'print "@F[0,2]\n"' file
或者作为可执行脚本:
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, '<', 'file' or die "Can't open file: $!\n";
while (<$fh>) {
my @fields = split;
print "@fields[0,2]\n";
}
执行如下脚本:
perl script.pl
或
chmod 755 script.pl
./script.pl
答案 5 :(得分:4)
我确信我不应该得到赏金,因为问题要求在perl中给出结果,但无论如何:
在bash / ksh / ash / etc中:
cut -d " " -f 1,3 "file"
在Windows / DOS中:
for /f "tokens=1-4 delims= " %i in (file) do (echo %i %k)
优点:像其他人说的那样,没有必要学习Pearl,Awk,没什么,只知道一些工具。可以使用“&gt;”将两个调用的结果保存到磁盘和“&gt;&gt;”操作
答案 6 :(得分:1)
while(<>){
chomp;
@s = split ;
print "$s[0] $s[2]\n";
}
请开始浏览documentation
答案 7 :(得分:0)
#!/usr/bin/env perl
open my$F, "<", "file" or die;
print join(" ",(split)[0,2])."\n" while(<$F>);
close $F
答案 8 :(得分:0)
一个简单的方法是:
(split)[0,2]
示例:
$_ = 'abc def ghi gkl';
print( (split)[0,2] , "\n");
print( join(" ", (split)[0,2] ),"\n");
命令行:
perl -e '$_="abc def ghi gkl";print(join(" ",(split)[0,2]),"\n")'