Извлечь два столбца из файла с помощью и отсортировать второй столбец

Скорее всего, вы ищете

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для контрольной суммы были бы лучшими инструментами.

-1
11.07.2020, 07:29
3 ответа
awk '$1=="ATOM"{print $11}' file | sort -n > foo.txt

или:

awk '$1=="ATOM"{print $1, $11}' file | sort -k2,2n > foo.txt

в зависимости от того, хотите ли вы включить ATOM в вывод или нет.

1
18.03.2021, 23:20

Несмотря на то, что 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напечатайте любую строку с успешной заменой.

1
18.03.2021, 23:20

Вы можете использовать манипуляции со строками для удаления нежелательных пробелов из строк. это оставит вам полезный разделитель для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

0
18.03.2021, 23:20

Теги

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