Intereting Posts
Использование отдельного раздела для установленного программного обеспечения Xmonad: плавайте и изменяйте размеры окон до «натурального размера» Разница между Linux Mint Debian Edition (LMDE) и Debian с Cinnamon Понимание grep и труб в linux Поиск и замена последовательности внутри скобки USB-адаптер Wi-Fi всегда отключается через некоторое время Plain vi (not vim): не удается удалить строку в режиме вставки: требуется ли это поведение POSIX? Как добавить изображение iso в grub2? Нужны хорошие идеи об улучшении любого сервиса Linux Правило ip6tables, чтобы разрешить непризнанный следующий заголовок Проблема с клавиатурой с тестированием Debian и gdm3 Удаленный запуск LXDE через SSH Вывод команды Pipe на Yad, а также запись результата в файл журнала В чем главная проблема, с которой сталкивается кто-то, мигрирующий из bash в zsh? Grep отображает как согласованные, так и убранные строки

Как сортировать коллекцию строк из разных файлов?

Я хочу сортировать вторую строку в каждом файле вторым столбцом, а также печатать имя соответствующего файла. Я делаю это так:

rm tmp; for filename in file*; do num=`head -2 $filename | tail -1 | awk '{print $2}'`; echo "$filename $num" >> tmp; done; sort -n -k2,2 tmp 

Может ли это быть сделано лучше, не включая tmp файл?

Пытаться:

 $ awk 'FNR == 2' file1 file2 filen | sort -n -k2,2 

С gawk вы можете использовать следующий nextfile для повышения эффективности:

 $ gawk 'FNR == 2 {print FILENAME,$2; nextfile}' file1 file2 filen | sort -n -k2,2 

или вы можете написать свою собственную функцию nextfile в другой реализации awk .

Если у вас нет gawk , вы можете использовать perl для более портативного:

 $ perl -anle 'print "$ARGV $F[1]" and close ARGV if $. == 2' file1 file2 filen | sort -n -k2,2 
 for f in file* ; do { read line read na num na } <"$f" printf '%s\t%s\n' "$f" "$num" done | sort -t\<tab> -n -k2,2 

Хотя трудно сказать наверняка, потому что вы не замечаете разделитель полей, это предполагает, что awk умолчанию, но делает работу с родным сценарием оболочки, я думаю.