Для исходного вопроса (одна строка из каждого файла, а не все строки, отсортированные так, как вы теперь говорите, что вы «нужны»), и эффективен, если файлы большие. (особенно больше, чем умещается в памяти), если у вас не-древний GNU awk (большинство Linux и некоторые другие системы с bash
):
[g]awk -vx= 'FNR==1||$0<x {x=$0""} ENDFILE {print FILENAME": "x}' file1 file2 ...
С не-GNU awk (или древним gawk) вы все равно можете сделайте это, но это немного неуклюже:
[*]awk -vx= 'FNR==1&&NR!=1 {print f": "x} FNR==1||$0<x {f=FILENAME;x=$0""} END {if(NR) print f": "x}' file1 file2 ...