Мне нравится использовать вставьте команду
.
paste -d. file1 - - file2 < /dev/null
производит желаемый результат
file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d
-
относится к стандартному вводу, мы используем его дважды, чтобы утроить наши точки dev / null
используется, потому что нам не нужно ничего между этими точками.
Чтобы отсортировать буквы в файле построчно, вы можете сделать что-то вроде этого:
while read line; do
grep -o . <<< "${line}" | sort | tr -d '\n'
echo
done < file.dic
Вывод:
abc
adorw
bdorw
abc
adorw
dorwzzz
Вы можете использовать команду fold
чтобы разбить строку на массив отдельных символов, как в приведенном ниже сценарии
#!/bin/bash
CHARS=`echo $1 | fold -w1`
# $CHARS now contain an array of single character in the string $1
for i in "${CHARS[@]}"
do
# do something with each character
echo $i;
done
Предполагая, что вы сохранили приведенный выше сценарий как test.sh
, вы можете запустить его следующим образом:
$./test.sh abcde
, и он сломается строку «abcde» в массив символов, который затем можно использовать для поиска ее анаграмм.
Вы упомянули python
, просто придерживайтесь python
. Два слова являются анаграммами друг друга, если 1. они содержат одинаковые буквы и 2. совпадают частоты букв. Встроенный класс Counter
может использоваться для выполнения однопроходных буквенных частот без необходимости сортировки
from __future__ import print_function
from collections import Counter, defaultdict
from itertools import combinations_with_replacement
with open('file') as f:
data = (l.rstrip('\n') for l in f)
data = ((l, Counter(l)) for l in data)
perms = defaultdict(list)
for l, c in data:
perms[frozenset(c.iteritems())].append(l)
for anagrams in perms.itervalues():
print(*anagrams)
bword
aword worda
abc cab
wordzzz
Perl с его флагами командной строки может быть очень лаконичным:
Следующая команда сортирует буквы в слове
perl -CS -ne 'chomp; print(join("", sort(split("", $_. "\n"))))'
На практике, если вы работаете с анаграммами, вы можете предпочесть использовать утилиту an
. Это может принимать словарь в качестве аргумента:
an -d /usr/share/dict/ngerman Anagramword