Что касается 1., я не думаю, что вы можете сделать это легко.Вы должны вызвать некоторый внешний скрипт и наблюдать его поведение через порт.
Что касается 2, вы можете сделать следующее:
Filenames = ["foo.erl", "bar.txt", "baz.erl"],
Sorted = lists:keysort(1, [{filename:extension(Name), Name} || Name <- Filenames])
[Name || {_, Name} <- Sorted].
Что касается 3, если с пробелом проблем нет,затем прочитайте их все в память, соберите данные в iolist () и запишите их обратно в нужный выходной файл.Если проблема с пространством, вам нужно немного поточить данные и прочитать их порциями.