Как извлечь только значения, больше, чем порог из файла?

У меня есть этот файл:

names average
john:15.02
Mark:09.63
James:12.58

Я хочу извлечь только средние числа, больше, чем 10 от него, таким образом, вывод в этом примере должен быть:

15.02
12.58
9
задан 18 December 2017 в 17:56

3 ответа

С awk

awk -F: '{if($2>10)print$2}' <filename

Объяснения

  • -F: – наборы Fразделитель ield к :
  • {if($2>10)print$2} – для каждой строки протестируйте ли 2без обозначения даты поле >10, раз так print это
  • <filename – позвольте оболочке открыть файл filename, это лучше, чем разрешение awk сделайте это, см. ответ Stéphane Chazelas по теме

Пример выполняется

$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58

Также возможно добавить пробелы и поместить шаблон вне скобок, таким образом, они равны – благодаря Stefan для указания что:

awk -F: '{if($2>10)print$2}' <filename
awk -F: '{ if ( $2 > 10 ) print $2 }' <filename
awk -F: '$2>10{print$2}' <filename
awk -F: '$2 > 10 { print $2 }' <filename
16
ответ дан 23 November 2019 в 04:49

С grep необходимо было бы работать с регулярными выражениями; например.

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

как с sed:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file

Но использование RegEx на заказанных данных является подверженным ошибкам (по моему опыту), и трудным читать ;-).

3
ответ дан 23 November 2019 в 04:49

Я публикую также это решение

sed '1d' File|cut -d: -f2 |awk '$0>10' 

sed '1d' = удаляет заголовок

cut -d: - f2 = сохраняет значения после разделителя (в данном случае:)

awk '$0>10' = печатает все значения больше 10

0
ответ дан 8 October 2020 в 10:56

Другие вопросы по тегам:

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