gpt4 book ai didi

perl - 使用 Perl 解析 block 中的文本

转载 作者:行者123 更新时间:2023-12-04 22:52:26 24 4
gpt4 key购买 nike

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

这是文件的示例:

Student-[K-6] Exceptional in Math
/home/area/kinder/mathadvance.txt, 12
Students in grade K-12 shown to be exceptional in math.
Placed into special after school program.
See /home/area/overall/performance.txt, 200

Student-[Junior] Weak Performance
Students with overall weak performance.
Summer program services offered as shown in
"/home/area/services/summer.txt", 212

Student-[K-6] Physical Excerise Time Slots
/home/area/pe/schedule.txt, 303
Assigned time slots for PE based on student's grade level. Make reference to
/home/area/overall/classtimes.txt, 90

我想要一个最终的 csv 文件,如下所示:

Grade,Topic,Path
K-6, Exceptional in Math, /home/area/kinder/mathadvance.txt, 12
K-6, Physical Exercise Time Slots, /home/area/pe/schedule.txt, 303
Junior, Weak Performance, "/home/area/services/summer.txt", 212

因为它是一个 csv 文件,我知道它在导出到 excel 时也会在行号处分开,但我对此没意见。
我首先将成绩类型放入数组中,因为我希望能够为不同的年级水平添加更多字符串。

到目前为止,我的程序看起来像这样:

#!/usr/bin/perl
use strict;
use warnings;

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

我在想我需要执行某种系统 sed 命令来获取括号中的内容并将其存储到变量中。然后我将获取该行括号右侧的所有内容并将其存储到一个变量中。然后我将 grep 查找包含“area”的行以获取路径,并将其作为字符串存储到变量中,将它们放入哈希中,然后打印到 csv 中。我不确定我是否以正确的方式思考这个问题。此外,我不知道如何为文件中的每个文本 block 执行此操作。我需要分块,因为每个 block 都有自己对应的等级、主题和路径。

最佳答案

perl -000 -ne '($grade, $topic) = /\[(.*)\] (.*)/;
($path) = m{(.*/area/.*)};
print "$grade, $topic, $path\n"' -- file.txt
  • -000开启段落模式,-n不会逐行读取,而是逐段读取
  • /\[(.*)\] (.*)/ 匹配方括号及其后面的任何内容直到换行符。方括号内和后面的文本使用圆括号捕获。
  • m{(.*/area/.*)} 捕获包含“area”的行。它使用 m{} 语法而不是 //,因此我们不必反斜杠(避免所谓的“倾斜牙签综合症”)

关于perl - 使用 Perl 解析 block 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com