詩の一行から最後の単語を分離するために(すべての韻律リストを取得するために)、私はこれを得るためにいくつかのコードを一緒に使用しました。
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
ご覧のとおり、「という言葉があります。キリストのための喪「アクセント文字が欠落しています。これはtr UTF-8機能がないためです。この行で同じことができますが、UTF-8アクセント文字を保存できるtrに代わるものはありますか?
答え1
tr
マルチバイト文字とその代替のいくつかのGNU実装の制限は次のとおりです。Unicode文字のtrシミュレーション?。
ここですべてのことができますawk
(GNU実装は少なくともマルチバイト文字とローカライズをサポートします)。
< yourfile awk '{
last = tolower($NF)
gsub(/[^[:alpha:]]+/, "\n", last)
print last}' |
rev | sort -u | rev
これは作る:
pietà
fanno
affanno
scritto
または、各行から最後の文字シーケンスを取得することが目的である場合は、次のように使用しますperl
(ロケールに応じてすべてのデコードを実行し、小文字、逆方向、ロケールの組み合わせに変換することもできます)。
<your-file perl -Mopen=locale -MPOSIX -lne '
$word{lc $1}++ if /(\p{Letter}+)\P{Letter}*$/;
END {
print $_->[0] for
sort {strcoll($a->[1], $b->[1])}
map {[$_, scalar reverse $_]} keys %word
}'
またはGNUツールを使用してください。
<yourfile grep -Po '\pL+(?=\PL*$)' | sed 's/.*/\L&/' | rev | sort -u | rev
または、次のコマンドを使用して最後の文字シーケンスを抽出しますsed
。
<yourfile sed -E '/([[:alpha:]]+)[^[:alpha:]]*$/!d;s//\n\L\1/;s/.*\n//' |
rev | sort -u | rev
最初の作業の後に行うと簡単になりますrev
。
<yourfile rev |
sed -nE 's/^[^[:alpha:]]*([[:alpha:]]+).*$/\L\1/p' |
sort -u | rev
答え2
使用幸せ(以前のPerl_6)
raku -e 'my @a.=push: .comb(/<alpha>+/)[*-1] if .chars for lines; \
.put for @a.unique>>.flip.sort( *.fc.trans: "àèéìòù" => "aeeiou" )>>.flip;'
または
raku -e 'my @a.=push: .comb(/<alpha>+/)[*-1] if .chars for lines; \
.put for @a.unique.map(*.flip).sort( *.fc.trans: "àèéìòù" => "aeeiou" ).map(*.flip);'
上記はコード化された答えです。幸せ、基本的にUnicodeを処理するように構築されています。つまり、文字がlines
含まれている場合(つまり空でない場合)、正規表現を使用してchars
1つ以上のアルファベット文字を含む行の最後の要素を見つけますpush
(破壊的な要素ではなく必須要素を肯定的に選択します)。 [分割は空白でのみ行われるため、結果要素にまだ句読点が残っていることを除いて、これは近似です。][*-1]
comb
<alpha>+
split
words
words
@a
配列がいっぱいになると(ここでmy @a.=push( … )
砂糖を抜いてくださいmy @a = @a.push( … )
), @a の要素は、unique
-ified、flip
ped、sort
ed、およびflip
ped back です。
ソートはルーチン/パラメータを介して行われます.sort( *.fc.trans: "àèéìòù" => "aeeiou" )
。つまり、*
ソートされた文字に基づいて要素がソートされます。fc
折りたたむ6つのアクセント文字trans
:"àèéìòù" => "aeeiou"
。ルーチンがない場合、trans
この6つのアクセント文字で終わる単語はリストの最後にソートされます。
入力例:
Se a ciascun l'interno affanno
Si leggesse in fronte scritto
Quanti mai, che invidia fanno
Ci farebbero pietà!
出力例:
pietà
fanno
affanno
scritto
私はPietro Metastasioの別の詩を試しました。無料。サンプル出力は下に示されていますが、.join(", ")
コードの末尾にカンマ区切りの出力(1行に1語ではなく)を返すように追加しました。以下の最初の答えそして電話trans: "àèéìòù" => "aeeiou"
、下の2番目の答えいいえ呼ぶtrans: "àèéìòù" => "aeeiou"
:
~$ perl6 -e 'my @a.=push: .comb(/<alpha>+/)[*-1] if .chars for lines; .put for @a.unique.map(*.flip).sort( *.fc.trans: "àèéìòù" => "aeeiou" ).map(*.flip).join(", "); put("");' file.txt
fa, ha, bella, quella, pena, catena, ragiona, sprona, ancora, talora, pietà, beltà, sciolta, volta, libertà, rinnova, prova, è, piace, spiace, infelice, Nice, ingannatrice, fé, me, penne, avvenne, core, ardore, colore, rossore, te, amante, incostante, fai, mai, guai, spezzai, dì, miei, sei, sdegni, segni, suoi, tuoi, così, dico, antico, parlando, dimando, umano, vano, sdegno, segno, hanno, sanno, dono, ragiono, sono, sincero, primiero, impero, altero, vero, aggiro, miro, curo, procuro, so, passò, appresso, oppresso, stesso, istesso, ingrato, prato, ascolto, volto, cimento, rammento, sento, contento, estinto, istinto, difetto, aspetto, consolar, parlar, sdegnar, trovar, piacer, pensier, soffrir, morir, cor, amor, favor
~$ perl6 -e 'my @a.=push: .comb(/<alpha>+/)[*-1] if .chars for lines; .put for @a.unique.map(*.flip).sort( *.fc ).map(*.flip).join(", "); put("");' file.txt
fa, ha, bella, quella, pena, catena, ragiona, sprona, ancora, talora, sciolta, volta, rinnova, prova, piace, spiace, infelice, Nice, ingannatrice, me, penne, avvenne, core, ardore, colore, rossore, te, amante, incostante, fai, mai, guai, spezzai, miei, sei, sdegni, segni, suoi, tuoi, dico, antico, parlando, dimando, umano, vano, sdegno, segno, hanno, sanno, dono, ragiono, sono, sincero, primiero, impero, altero, vero, aggiro, miro, curo, procuro, so, appresso, oppresso, stesso, istesso, ingrato, prato, ascolto, volto, cimento, rammento, sento, contento, estinto, istinto, difetto, aspetto, consolar, parlar, sdegnar, trovar, piacer, pensier, soffrir, morir, cor, amor, favor, pietà, beltà, libertà, è, fé, dì, così, passò
注:ハイフンで連結された単語(存在する場合)は、すべての句読点が削除されるため、分析中に構成単語に分割されます。