我有一堆荷花池以下格式的文件:
\score {
\new StaffGroup = "" \with {
instrumentName = \markup { \bold \huge \larger "1." }
}
<<
\new Staff = "celloI" \with { midiInstrument = #"cello" }
\relative c {
\clef bass
\key c \major
\time 3/4
\tuplet 3/2 4 {
c8(\downbow\f b c e g e)
} c'4 | %01
\tuplet 3/2 4 {c,8( b c e f a) } c4 | %02
\tuplet 3/2 4 { g,8( d' f g f d) } b'4 | %03
}
>>
\layout {}
\midi {}
}
如何将该\relative c {...}
块提取到一个新文件中,因此它看起来像这样:
\relative c {
\clef bass
\key c \major
\time 3/4
\tuplet 3/2 4 {
c8(\downbow\f b c e g e)
} c'4 | %01
\tuplet 3/2 4 {c,8( b c e f a) } c4 | %02
\tuplet 3/2 4 { g,8( d' f g f d) } b'4 | %03
}
在这种情况下,不一定需要修复压痕。那会是一个awk
orcsplit
任务吗?它会是什么样子?
答案1
您可能需要考虑如何处理输出,例如使用带有输出扩展名的输入名称。修改缩进应该不难。
该脚本列出了命令行上命名的任意数量的文件,以及一个文件中任意数量的此类块。
这是您的示例的输出:
Paul--) ./LilyPond Lily.txt
\relative c {
\clef bass
\key c \major
\time 3/4
\tuplet 3/2 4 {
c8(\downbow\f b c e g e)
} c'4 | %01
\tuplet 3/2 4 {c,8( b c e f a) } c4 | %02
\tuplet 3/2 4 { g,8( d' f g f d) } b'4 | %03
}
这是脚本。
Paul--) cat LilyPond
#! /bin/bash
function Relative {
local AWK='''
BEGIN { reRel = "[\\\\]relative[ ]+c"; }
function cntBrace (tx, Local, n) {
n += gsub ("{", "{", tx);
n -= gsub ("}", "}", tx);
return (n);
}
$0 ~ reRel || nBrace > 0 { print; nBrace += cntBrace( $0); }
'''
awk -f <( echo "${AWK}" ) "${@}"
}
#### Script Body Starts Here.
Relative "${@:--}"