У меня есть работа, которая не кажется очень сложной, но я недостаточно умен, чтобы знать, с чего начать.:)
Итак, у меня есть несколько файлов, которые содержат строки с именами на конце, что-то вроде этого:
File 001:
blahblahblahblahblah:Mrs Jane Doe
blahblahblahblahblah:John Doe
blahblahblahblahblah:Joe Bloggs
File 002:
blahblahblahblahblah:Dr Jane Doe
blahblahblahblahblah:John Doe
blahblahblahblahblah:Joe Bloggs
blahblahblahblahblah:Fred Bloggs
...
И так далее.Я хотел бы, чтобы скрипт прошел через все эти файлы и выдал следующий вывод:
John Doe
001
002
...
Fred Bloggs
002
...
Но я не знаю, как называются имена, поэтому он должен их найти (легкодостаточно с регулярным выражением, очевидно), а затем сопоставить их самостоятельно.
Кроме того, это также необходимо учитывать случай Джейн Доу, где она появляется в разных местахс разными названиями.В идеале я хотел бы, чтобы выходные данные для нее были примерно такими:
Jane Doe
001 - Mrs
002 - Dr
...
Так что этот сценарий должен был бы быть в состоянии исключить определенные термины (которые я бы, конечно, предоставил) для целейсортировка, но будьте достаточно умны, чтобы добавить эти термины обратно в мои результаты, чтобы я мог отслеживать изменения.
Это то, что я могу сделать с помощью одного инструмента, такого как awk, или я смотрю как Ruby/ Python / Perl скрипт вроде работы?Если последнее, кто-то может указать мне на функции или библиотеки или что я мог бы использовать?(Я довольно посредственный в написании сценариев / программировании, но с достаточной документацией я могу в конечном итоге разобраться)
Приветствия!
Редактировать: Кажется, мне это удалосьсамостоятельно.:) Вот что я сделал на случай, если кто-нибудь столкнется с этим в будущем:
1.Я объединил все свои имена в один файл и удалил все названия, например:
cat * | \
perl -pe 's/^(Dr |Mrs |Mr |blahblah )//ig' | \
sort | \
uniq -i > \
notitles.txt
2.Я перебрал полученный файл с помощью grep:
while read name; do
export fname="`echo $name | perl -pe 's/[\r\n]//g'`"
echo "\n=={$fname}=="
egrep -i "$name" * | \
sed -E 's/\.txt:/ /g' | \
perl -pe 's/(?<!==)$ENV{"fname"}//ig'
done < notitles.txt
И затем я получил свой список имен, как я хотел!