首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Perl解析块中的文本

使用Perl解析块中的文本
EN

Stack Overflow用户
提问于 2019-10-08 20:07:11
回答 1查看 90关注 0票数 2

我有一个包含多个测试块的文件。对于每个测试块,我希望能够提取方括号中的内容,包含单词"area“的第一个实例的行,以及方括号右侧的内容。一切都将是一根线。本质上,我想要做的是将每个字符串存储在散列中的一个变量中,这样我就可以将它打印到一个3列csv文件中。

下面是该文件的示例:

学生-K-6数学特长

/home/area/kinder/mathadvance.txt,12

K-12年级的学生在数学方面表现得很出色。

被安排到特殊的课后项目中。

见/home/area/ See /Performance.txt,200名学生-初三成绩不佳

整体表现不佳的学生。

暑期课程服务如图所示

"/home/area/services/summer.txt",212学生-K-6物理锻炼时隙/home/area/pe/schedule.txt,303

根据学生的年级水平分配体育课的时隙。参考

/home/area/area/classtimes.txt,90

我想要一个最后的csv文件,它看起来像:

等级,主题,路径K-6,数学例外,/home/area/kinder/mathadvance.txt,12K-6,体育锻炼时隙,/home/area/pe/schedule.txt,303初中,弱表现,"/home/area/services/summer.txt",212

因为它是一个csv文件,我知道它在导出到excel时也会在行号上分开,但我对此没有意见。

我首先将等级类型放入数组中,因为我希望能够为不同的级别向它添加更多的字符串。

到目前为止,我的程序是这样的:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;

my @grades = ("K-6", "Junior", "Community-College", "PreK");

我在想,我需要执行某种system命令来获取括号中的内容,并将其存储到一个变量中。然后,我将抓取行中括号右侧的所有内容,并将其存储到一个变量中。然后,我将对包含"area“的行进行grep以获取路径,并将其作为字符串存储到变量中,将其放入散列中,然后打印到csv中。我不确定我是不是用正确的方式想这件事。另外,我不知道如何对文件中的每一个文本块执行此操作。我需要它的分块,因为每个区块有自己的相应的等级,主题,和路径。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-08 20:28:05

代码语言:javascript
复制
perl -000 -ne '($grade, $topic) = /\[(.*)\] (.*)/;
               ($path) = m{(.*/area/.*)};
               print "$grade, $topic, $path\n"' -- file.txt

  • -000打开段落模式时,-n不会逐行读取,但是段落by paragraph
  • /\[(.*)\] (.*)/匹配方括号和后面的任何内容,直到换行符为止。方括号的内部和下面的文本使用parentheses.
  • m{(.*/area/.*)}捕获包含"area“的行。它使用m{}语法而不是//,因此我们不必反斜杠(避免所谓的“倾斜牙签综合症”)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58293374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档