詩の一行から最後の単語を分離するために(すべての韻律リストを取得するために)、私はこれを得るためにいくつかのコードを一緒に使用しました。
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