如何通过索引号获取文本段落
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
中使用NR
或FNR
(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 在可折叠窗口中找到段落文本元素