Как лучше всего понять эффективность моей программы, кроме средней нагрузки?

for name in *.txt; do
    cut -f 5,10 -- "$name" | sort -k 1,1 >"$name.sort"
done

Это позволит объединить эффект двух начальных циклов, избавившись от использования промежуточных файлов.

Я внес небольшие изменения:

  • Заключение расширения всех переменных, потому что Когда необходимо двойное -заключение в кавычки?
  • Использование лучшего имени для переменной цикла.
  • Разделение переменной из команды cutс использованием --для обозначения конца параметров, если имя файла в $nameначинается с дефиса.

Можно также использовать sort -k 1,1 -o "$name.sort"вместо команды sortвыше, чтобы позволить утилите sortсоздать выходной файл, а не оболочку (небольшое отличие ).


Утилита xargsчасто используется вместо цикла:

printf '%s\n' *.txt | xargs -I {} sh -c 'cut -f 5,10 -- "$1" | sort -k 1,1 >"$1.sort"' sh "{}"

... но здесь это только усложняет задачу (приведенная выше команда будет иметь проблемы с обработкой имен файлов, содержащих символы новой строки ).

Ваша команда

cut -f 5,10 $i >$i.txt.out | xargs -I{} sort -k1,1  {} >$i.sort

выполнит cutи сохранит вывод в$i.txt.out$iрасширенным ). Команда xargsне получит ввода из-за перенаправления вывода cutв файл. Если бы вы не перенаправили вывод cut, xargsвыполнил бы sortс содержимым файлов в качестве аргументов, а не с именами файлов.Это не то, что вы хотите (, вы хотите передать вывод cutкак данные вsort).

1
13.08.2021, 00:51
0 ответов

Теги

Похожие вопросы