问题描述
我想知道是否有办法像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
...
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索引。