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

问题描述

我想知道是否有办法像sed那样用数字获取文本段落(源文件将是pyx文件

sed -n ${i}p

此刻,我希望将awk用于:

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

但是我找不到关于它的文档或示例。

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

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

编辑:

这只是一个例子,不是我的确切需要,但我需要知道如何为一个功能项目做这件事

让我们以导出大量音频文件的ID3Tag为例,这些ID3Tag已以类似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个文件的歌词,该怎么做? / p>

最后,这只是一个问题,是否有一个等效于 sed -n $ {num} p 但用于段落

解决方法

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,"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)设置为“”,将文件作为一行使用。然后,我们根据分隔符音频艺术家将整个文件分成一个数组arr。我们从2开始,以2的步长浏览数组arr,直到数组的结尾,然后去掉左括号和右括号,创建另一个名为arts的数组,其增量为索引,剥离的artist为值。最后,我们打印由传递的indx变量(在本例中为1234)指定的arts索引。