如何通过索引号获取文本段落

Posted

技术标签:

【中文标题】如何通过索引号获取文本段落【英文标题】:How to get paragraphs of text by index number 【发布时间】:2020-11-06 08:18:08 【问题描述】:

我想知道是否有办法像 sed 对行一样按数字获取文本段落(源文件将是一个 pyx 文件)

sed -n $ip

此时我有兴趣将 awk 用于:

awk '/custom-pyx-tag\(/,/\)custom-pyx-tag/'

但我找不到相关文档或示例。

我也在尝试使用 gsub(/\r\n/,"; ") int 相同的 awk 命令修剪“\r\n”,但它不起作用,我无法弄清楚为什么。

任何提示将不胜感激,谢谢

编辑:

这只是一个例子,并不是我的确切需要,但我需要知道如何为一个多用途项目做到这一点

假设我已经导出了大量音频文件的 ID3Tags,并且这些文件以类似 pyx 的格式存储,所以最后我将有一个不错的大文件,每个文件都重复这种模式在集合中:

audio-genre(
blablabla
)audio-genre
audio-artist(
bla.blabla
)audio-artist
audio album(
bla-bla-bla
)audio-album
audio-track-num(
0x
)audio-track-num
audio-track-title(
bla.bla-bla
)audio-track-title
audio-lyrics(
blablablablabla
bla.bla.bla.bla
blah-blah-blah
blabla-blabla
)audio-lyrics
...

现在,如果我想提取第 1234 个音频文件的艺术家,我可以使用:

awk '/audio-artist\(/, /)audio-artist/' | sed '/audio-artist/d' | sed -n 1234p

所以作为一行可以用 sed 获取,但我不知道如何获取给定索引的整个段落,例如,如果我想获取第 6543 个文件的歌词,我该怎么做?

最后只是是否有一个命令相当于的问题 sed -n $ num p 但用于段落

【问题讨论】:

欢迎来到 SO 并特别感谢您在问题中表现出的努力。您能否在您的问题中添加输入样本和预期输出样本,然后让我们知道以便更好地理解问题。 对于\r\n,请参阅***.com/questions/45772525/… ...对于段落,您可以将RS设置为空字符串,然后在awk中使用NRFNR(sed won'适合这里) 未经测试所以不是答案:perl -00 -ne 'print if $. == '"$i" input.txt 【参考方案1】:
awk -v indx=1024 
    'BEGIN 
             RS=""
           
            split($0,arr,"audio-artist");
             for (i=2;i<=length(arr);i=i+2) 
                                           gsub("[()]","",arr[i]);
                                            arts[cnt+=1]=arr[i] 
                                           
             
     END  
            print arts[indx] 
         ' audioartist

一个班轮:

awk -v indx=1234 'BEGIN RS="" NR==1  split($0,arr,"audio-artist");for (i=2;i<=length(arr);i=i+2)  gsub("[()]","",arr[i]);arts[cnt+=1]=arr[i]   END  print arts[indx] ' audioartist

使用 awk 和名为 audioartist 的文件,我们通过将记录分隔符 (RS) 设置为 "" 来将文件作为一行使用。然后,我们根据分隔符 audio-artist 将整个文件拆分为数组 arr。我们从 2 开始以 2 为步长查看数组 arr 直到数组末尾,并去掉左括号和右括号,创建另一个名为arts 的数组,其索引为递增计数,删除的艺术家为值。最后,我们打印由传递的 indx 变量指定的艺术索引(在本例中为 1234)。

【讨论】:

谢谢,我用另一种方式解决了,但我保存了你的行,更好地理解 awk 会很有用,非常感谢

以上是关于如何通过索引号获取文本段落的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Selenium Python 在可折叠窗口中找到段落文本元素

如何使用Javascript获取具有类名的几个段落的值?

如何通过添加 <span> 来修改 Django 内容的某些部分,同时保持段落文本的原始格式?

获取从VBA中的段落获得的行的第一个单词的索引号

检测重复/非常相似的文本段落

如何在可可触摸的uitableviewcell中使用段落文本