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

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

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 файл?

2 Solutions collect form web for “Как сортировать коллекцию строк из разных файлов?”

Пытаться:

 $ 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 умолчанию, но делает работу с родным сценарием оболочки, я думаю.

  • Как разбирать несколько шаблонов строк в скрипте linux shell
  • bash + как увеличивать переменные, содержащие буквы a..z
  • Как удалить строки, включенные в один файл из другого файла в bash?
  • Идентификация повторяющихся полей и печать как с awk
  • Как вернуть 0, если шаблон сопоставлен с файлом?
  • Найти набор дополнений массива?
  • Каков самый простой способ выполнить текст из хвоста в командной строке?
  • Как добавить каждый элемент в список с помощью цикла?
  • Как перенаправить вывод команды в файл?
  • Как я могу получить правильное время окончания команды nohup?
  • Резервное копирование большого файла
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.