为了隔离一首诗的任何一行中的最后一个单词(列出所有押韵),我将几个代码片段放在一起获得这个
awk '{print $NF}' input.txt | tr 'A-Z' 'a-z' | tr -sc 'a-z' '\n' | rev | sort | uniq | sort -d | rev
将其应用于这样的诗歌:
Se a ciascun l'interno affanno
Si leggesse in fronte scritto
Quanti mai, che invidia fanno
Ci farebbero pietà!
我明白了
fanno
affanno
scritto
piet
如您所见,“ pietà ”这个词没有重音字符。我想这取决于没有 tr UTF-8 功能。是否有任何替代 tr 能够在这一个班轮中执行相同的任务,但保留 UTF-8 重音字符?
tr
关于多字节字符及其一些替代方案的 GNU 实现的限制在tr analog for unicode 字符中涵盖?.在这里,你可以做任何事情
awk
(GNU 实现至少支持多字节字符和本地化):这使:
或者,如果打算从每一行获取最后一个字母序列,使用
perl
(您还可以根据语言环境进行所有解码,转换为小写,反向,语言环境排序规则):或者使用 GNU 工具:
或使用以下方法进行最后一个字母提取序列
sed
:如果在第一个之后完成,这会更容易
rev
:使用Raku(以前称为 Perl_6)
或者
以上是用Raku编码的答案,默认情况下它是为处理 Unicode 而构建的。简而言之,如果
lines
包含chars
字符(即非空白),push
则通过正则表达式查找一个或多个字母字符(积极选择所需元素,而不是破坏性[*-1]
)。[注意,这将是一个近似值,除了仅在空格上拆分,因此仍会在结果元素中留下标点符号]。comb
<alpha>+
split
words
words
一旦
@a
数组被填充(这里是my @a.=push( … )
去糖my @a = @a.push( … )
),@a 的元素被unique
-ified、flip
ped、sort
ed 和flip
ped 返回。排序是通过routine/parameters 完成的
.sort( *.fc.trans: "àèéìòù" => "aeeiou" )
,这意味着*
元素是根据fc
大小写折叠的字符以及六个重音字符来排序的trans
:"àèéìòù" => "aeeiou"
. 如果没有该trans
例程,以这六个重音字符结尾的单词会排在列表的末尾。样本输入:
样本输出:
我冒昧地测试了 Pietro Metastasio 的另一首题为La libertà的诗。示例输出如下所示,但是我
.join(", ")
在代码末尾添加以返回逗号分隔的输出(而不是每行一个字)。第一个回答下面的电话trans: "àèéìòù" => "aeeiou"
,第二个回答下面没有电话trans: "àèéìòù" => "aeeiou"
:警告:因为所有标点符号都被删除了,所以在分析过程中,连字符(如果有的话)会被分成组成词。