Скорее всего, вы ищете
basename -a /usr/hdp/2.6.4.0-91/tez_hive2/lib/*.jar | wc -c
Путь с подстановочным знаком перечисляет все jar-файлы, basename
каталоги полос команд(-a
необходимы для принятия многих аргументов ), а wc -c
просто подсчитывает байты (, если некоторые имена файлов состоят из 2-байтовых символов. тогда, возможно,wc -m
(число символов )будет лучшим выбором ).
Однако, если цель состоит в том, чтобы проверить, были ли изменены файлы, то, возможно,stat
(для времени модификации )или md5sum
/ shasum
для контрольной суммы были бы лучшими инструментами.
awk '$1=="ATOM"{print $11}' file | sort -n > foo.txt
или:
awk '$1=="ATOM"{print $1, $11}' file | sort -k2,2n > foo.txt
в зависимости от того, хотите ли вы включить ATOM в вывод или нет.
Несмотря на то, что awk
определенно подходит, вот альтернатива, использующая вложенные группы захвата, где вы....
sed -En "s/^(^ATOM)(( +)([^ ]+)){10}.*/\1 \4/p" file | sort -n
ATOM 14.98
ATOM 17.95
ATOM 20.83
sed -En "s/(^ATOM)(( +)([^ ]+)){10}.*/\4/p" file | sort -n
14.98
17.95
20.83
Прохождение
sed
с использованием -E
расширенного регулярного выражения -n
не печатать строки по умолчанию, затем s/
заменить с помощью
\1
— это первый захват в (^ATOM)
(^
, привязанный к началу строки, поэтому это первое поле ), \2
— это {10}
-е последующее повторение (( +)([^ ]+))
, \3
— это ( +)
в этом повторении, а \4
— это ([^ ]+)
, который вы хотите получить в том же повторении (11-го поля ). .*
Затем перекомпонуйте выходные данные из захваченных групп как /\1 \4/
или /\4/
по своему усмотрению и p
напечатайте любую строку с успешной заменой.
Вы можете использовать манипуляции со строками для удаления нежелательных пробелов из строк. это оставит вам полезный разделитель дляcut -d
(пробела или табуляции)
var="$(cat input.txt)"
echo "${var//+( )/$'\t'}" | cut -f1,11 | sort -nk2 > output.txt
//
заменить все вхождения +( )
соответствует пробелам $'\t'
табулятор
cut -f
выводит поле1,11
sort -n
будет сортировать числовые -k
начиная со слова2