文字列の桁数に基づいたリストのフィルタリング

文字列の桁数に基づいたリストのフィルタリング

次の短いリストに似た長い項目のリストがファイルに書き込まれます。

FFF1B976-9DDE-11E7-9C3D-6241D7D553BE
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049
6846DFEC-C0A2-11E8-B7A8-3ECB9C0CC049
--[SNIP]--

各項目の桁数(セットの文字)に基づいてこのリストをフィルタリングし、桁数が特定のしきい値を超える場合は0123456789文字列を保持し、それ以外の場合は削除したいと思います。前の例では、名前に18桁の数字を含むすべての項目を保持するにはどうすればよいですか?

予想出力:

FFF1B976-9DDE-11E7-9C3D-6241D7D553BE
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049
682D9DB6-C0A2-11E8-B7A8-3ECB9C0CC049

ベストアンサー1

そしてawk

awk -F '[[:digit:]]' 'NF > 18'

数字をフィールド区切り文字として使用するため、フィールド数は1に数字を加えた値(合計x1yで除算)になります。したがって、上記では以下を求めようとします。xy少なくとも18桁。

( . POSIX 文字クラスにmawk置き換えられることはサポートされていませんが、他の実装とは異なり、ロケールに関係なく0123456789でのみ一致します。移植可能な場合、またはテキストに非ASCIIデータが含まれていないことがわかっている場合は使用できます。)[:digit:]0-9mawk[0-9]awk[0123456789][0-9]

お持ちの方のために 正確に18桁の数字、つまり:

awk -F '[[:digit:]]' 'NF == 19'

の場合、sed少なくとも18桁:

sed -e 's/[[:digit:]]/&/18;t' -e d

そしてgrep

grep -E '(.*[[:digit:]]){18}'

おすすめ記事