У меня есть этот файл:
names average
john:15.02
Mark:09.63
James:12.58
Я хочу извлечь только средние числа, больше, чем 10 от него, таким образом, вывод в этом примере должен быть:
15.02
12.58
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
С 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 на заказанных данных является подверженным ошибкам (по моему опыту), и трудным читать ;-).
Я публикую также это решение
sed '1d' File|cut -d: -f2 |awk '$0>10'
sed '1d'
= удаляет заголовок
cut -d: - f2
= сохраняет значения после разделителя (в данном случае:)
awk '$0>10'
= печатает все значения больше 10