Предполагая, что ваш ввод небольшой, и имена файлов не содержат пробелов или других странных символов, вы можете просто использовать ls
.
ls -dt $(cat files)
$ (cat files)
помещает содержимое файлов
в командную строку и разбивает их на пробелы, чтобы получить список аргументов. ls -t
принимает список файлов в качестве аргументов, сортирует их по времени mtime и выводит на печать. -d
необходим, чтобы выводить список каталогов, используя их имена, а не их содержимое.
Если этого недостаточно, вы можете попробовать шаблон декорировать / сортировать / убирать украшения , например
$ while IFS=$'\n' read file; do
printf '%d %s\n' "$(stat -c +%Y "$file")" "$file"
done files.sorted
где IFS = $ '\ n' файл чтения; do ... done
file
для каждой записи с разделителями новой строки в files
по очереди, printf ... stat ...
поворачивается
в
, sort -k1nr
сортирует строки на основе первого поля в обратном числовом порядке, затем вырезать
удаляет
, оставляя вам только
в отсортированном порядке.
Я сократил это до очень маленького примера. (Возможно, удастся продемонстрировать сбой с более простой строкой FPAT
, но мне не хотелось тратить на это еще десять минут. )По сути, для ввода типа foo,bar
мы можем получить два разных результата.
Случай А:
NF = 2
$1 = foo
$2 = bar
$3 =
и
Случай Б:
NF = 3
$1 = foo
$2 =,
$3 = bar
Этот код создает Случай B:
BEGIN {
FPAT = "^,|[^,]+"
}
{
print "NF =", NF
print "$1 =", $1; print "$2 =", $2; print "$3 =", $3
}
(Я убрал скобки из FPAT
, потому что они не нужны; Я удалил часть регулярного выражения, которая обрабатывает строки в кавычках могут содержать запятую (s ), и я сократил код до минимума.)
Используйте
echo foo,bar | awk -f name_of_the_above_awk_script
Но — по крайней мере, в gawk версии 4.1.1 — если я получу доступ к $1
до того, как мы получим доступ к NF
,тогда я получаю Случай А. Вы можете продемонстрировать это, поменяв порядок операторов print
, или этим нелепым клуге:
{
temp = $1 # We will never use this.
print "NF =", NF
print "$1 =", $1; print "$2 =", $2; print "$3 =", $3
}
Это явно ошибка; невозможно получить доступ к полю должны изменить значения других вещей.
Просто добавьте temp = $1
перед циклом for
, и я ожидаю, что вы получите желаемый результат (, используя NF
).
В приведенном выше тексте я намеренно избегал упоминаний ни о случае A, ни о случае B. как «правильный» или «неправильный». Вариант А – это то, что вам нужно. но случай B на самом деле может быть правильным результатом для значения FPAT
, которое вы используете. Кажется, это говорит о том, что вы хотите, чтобы поле было
Но вы не хотите, чтобы запятая была полем; вам просто нужны второй и третий варианты. Я нахожу эту настройку
FPAT = "[^,]+|\"[^\"]+\""
даст вам правильные результаты.