У меня есть очень большой список слов. Как я могу использовать Unix (или возможно Python) для нахождения экземпляров нескольких слов, соответствующих определенным совместно использующим символ критериям? Например, я хочу, чтобы Word 1 и 2 имели те же четвертые и седьмые символы, Word 2 и 3, чтобы иметь те же четвертые и девятые символы и Word 3 и 4, чтобы иметь те же вторые, четвертые, и девятые символы.
Пример:
aaadiigjlf
abcdefghij
aswdofflle
bbbbbbbbbb
bisofmlwpa
fsbdfopkld
gikfkwpspa
hogkellgis
мог бы возвратиться
abcdefghij
aaadiigjlf
fsbdfopkld
aswdofflle
Править: Для разъяснения мне нужен код для возврата любых слов, которые совместно используют те же символы в данных положениях; у меня нет определенных символов (как "d" и "g", как дали в примере) в памяти. Кроме того, я хотел бы, чтобы это смогло возвратить слова, которые не соответствуют ВСЕМ критериям; например, в данном примере, Word 1 и 4 совместно используют четвертый символ, но не обязательно второе, седьмое, и девятый. С программой я работаю в ее законченной форме, я ожидаю, что это возвратит очень маленький список слов (вероятно, только десять) на основе девяти строгих совместно использующих символ критериев.
Использовать grep
который использует Регулярные выражения:
# Find all lines where the fourth and seventh letter are "d" and "g"
grep '...d..g' somefile
# Find all lines where the fourth and ninth letters are "d" and "l"
grep '...d....l' somefile
Если бы Вы хотите осуществить оба правила, Вы объединили бы их в цепочку вместе использование канала:
grep '...d..g' somefile | grep '...d....l'
Можно уменьшить многословие regex и нескольких точек с помощью синтаксиса {123}
вместо 123 точек, таких как:
egrep '.{3}d.{2}g' somefile
Обратите внимание, что, поскольку Ваше регулярное выражение становится более сложным, Вы, возможно, должны использовать egrep
поддерживать некоторый синтаксис, такой как синтаксис повторения выше.