大文字で始まる2つの連続した単語を見つけようとしています。
はい
入力する:x Yyy Zzz xx y
出力:Yyy Zzz
これで、すべての大文字を見つけることができますcat txtfile.txt | grep -o '\<[A-Z][a-z]*\>'
出力を取得するには、コードをどのように変更しますか?
フレンドリーな安否
ベストアンサー1
Raku(以前のPerl_6)の使用
raku -ne 'my @a = .words.rotor(2 => -1); for @a {.put if $_ ~~ $_.map(*.wordcase)};'
入力例:
x Yyy Zzz xx y
x Yyy Zzz Www
a Mmm: Yyy bbb
aaa aaa aaa
Ccc ccc CCC
Bbb Bbb Bbb Bbb
出力例:
Yyy Zzz
Yyy Zzz
Zzz Www
Mmm: Yyy
Bbb Bbb
Bbb Bbb
Bbb Bbb
この呼び出しは.words
Raku にスペースで入力行を分割するよう指示します。単語はrotor
一緒にグループ化されます。このrotor
パラメータは、(2 => -1)
単語が重なる隣接ペアとして扱われ、重複する単語の連続ペアがそれぞれ生成されるように指示します。
単語ペアは$_
トピック変数にロードされ、一致するかどうかテストされます$_.map(*.wordcase)
。つまり、各単語(最初の文字)が大文字で示されている独自のバージョンと一致するかどうかがテストされます。一致するものがある場合は、$_
大文字(最初の文字)の単語のペアでなければならず、その単語のペアが返されます。
1行ずつ返す必要がある場合は、次のように.put
呼び出しを置き換えることができます(例print "$_, "
:)。unique
Rakuには固有の単語のペアだけが必要な場合でもルーチンがあります。
https://docs.raku.org/routine/wordcase
https://docs.raku.org/routine/rotor
https://raku.org