我想在Perl的同一行上添加一个条件和循环。这就是我想要达到的目标:
foreach (0 .. 10) {
print $_ if $_ % 2;
}
这应该会给我13579。我在寻找一个类似Python循环理解的语句。
[i for i in range(10) if i % 2]
我知道print $_ foreach 0 .. 10;可以工作,但问题是在语句中添加条件.
我有一个包含一组元素的数组。元素的顺序是无关紧要的-我使用数组,因为它是我所知道的Perl中最简单的数据结构。
my @arr = ...
while (some condition) {
# iterate over @arr and remove all elements which meet some criteria
# (which depends on $i)
}
我知道splice(),但我认为在迭代时使用它并不好。数组元素的delete似乎已弃用。也许可以在@arr上直接使用grep (@arr = grep {...} @arr)?
这里的最佳实践是什么?
也
我写了一个脚本,使用perl和json从谷歌地理编码器获取一些信息。下面的示例使用机场缩写获取地址信息。
use JSON;
use LWP::Simple;
my $geo_url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=PHL";
my $response = get($geo_url);
my $json = decode_json($response);
my $location = $json->{results}[0]->{geometry}-
我们有一个基于Perl的web应用程序,它的数据来源于一个巨大的纯文本文件存储库。这些平面文件被放到我们系统上的一个目录中,我们对它们进行广泛的解析,将一些信息插入到存档数据库中,然后将这些文件移动到它们的归档存储库和永久主目录(/www/ MySQL /MySQL/*.txt)。现在,我们不会解析这些平面文件中的每一位数据,一些比较模糊的数据项也不会被存储在数据库中。
目前存在的要求是,用户能够从Perl生成的网页中对整个平面文件存储库执行全文搜索,并返回一个命中列表,然后他们可以单击并打开文本文件进行查看。
启用这种搜索功能的最优雅、最有效且不占用CPU的方法是什么?
在匹配正则表达式"critical“或"error”之前抓取10行代码是很有趣的。目前,我正在打印$_,它只给我提供了正则表达式匹配的行。
我在perl中写了以下内容:
#!/usr/bin/perl -w
use strict;
open LOG, "/Users/erangross/Projects/perl/log" or die;
while (<LOG>){
if (/critical | error/){
open (myFile, '>>parser_log.txt');
尊敬的同事..。
我生成数千行表单的日志文件:
a
b
X
d
X
e
b
g
Y
a
Y
d
例如,我希望脚本的输出通过最后匹配的"^X“打印所有行,然后只打印匹配的"^Y”。上述预期产出:
a
b
X
d
X
Y
Y
"X“总是会出现,但"Y”可能不会出现。在没有出现"Y“的情况下,我相信最后一个"X”将出现在文件的最后一行。
用"sed“很难做到这一点,尽管这是我一直在尝试的。我使用"tac“翻转行顺序,以便在"^X”的第一次匹配中删除与"^Y“不匹配的任何内容。因为我不使用"-n",所以在第
p = Popen(our_cmd, shell=True, stdout=PIPE, stderr=PIPE)
output = p.communicate()[0]
split = output.strip('\n\t\r').split("\n")
我想执行字符串our_cmd中的这个命令
我试过的是这样的
my @output = `$our_cmd`; ## here command is executing
my @split = grep(s/\s*$//g, @output); ## the format and putting in new a
我对perl还不熟悉,目前我还停留在这个问题上。
我在一个目录中有多个文件
我想检查他们的名字,看看文件名是否匹配某个关键字(不是整个文件名)。因此,最后,我想获取特定的文件,所有的都有一个特定的关键字,然后处理他们。
我在试着
grep -rl "keyword" /.;
#where does the filenames get stored? let's say in $_?
#foreach valid file, do something
从我发现的某个网站上,但它似乎不起作用?救命,谢谢!!
我有一个输入文件,如
file;14;19;;;hello 2019
file2;2019;2020;;;this is a test 2020
file3;25;31;this is a number 31
我只想要;;;之后的grep号码。例如,如果我想要grep 2019,它会给我
file;14;19;;;hello 2019
而不是我做了grep '2019' file
file;14;19;;;hello 2019
file2;2019;2020;;;this is a test 2020
我怎样才能完成这个任务?
如何获取数组中的所有项,而不是最后一个id?
我找到的两种方法都不起作用:
my @a;
# Add some elements (no consecutive ids)
$a[0]= '1';
$a[5]= '2';
$a[23]= '3';
print $#a, "\n"; # Prints 23
print scalar(@a), "\n"; # Prints 24
我本以为会得3分...
我有一个文件: file.txt,其中包含以下数据。grep版本: 2.5.1,系统管理员拒绝将其升级到更晚的版本,因为它可能会影响生产
This is a file, my name is Karl, what is this process, karl is karl junior, file is a test file, file's name is file.txt
My name is not Karl, my name is Karl Joey
What is your name?
Do you know your name and what it is?
当我运行下面的
我有两份文件。文件ci.text有编号列表,文件search.text是常规文件(日志文件类型)。我想搜索文件ci.text中存在的每个数字是否存在于文件search.text中?我试着跟随程序,但徒劳无功。
open(my $ci,"<","ci.text") or die $!;
open(my $si,"<","search.text") or die $!;
while (<$ci>) {
print $_;
if ( grep /$_/, $si )
{
pr