Печатайте только значения, которые меньше определенного порога в bash - PullRequest
6 голосов
/ 27 июля 2011

У меня есть файл с более чем 10000 строками, в основном числами и некоторыми строками;

-40

-50

stringA

100

20

-200

...

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

В этом случае вывод (отсортированный) будет

-40

-50

-200

...

Ответы [ 3 ]

9 голосов
/ 27 июля 2011
cat filename | awk '{if($1==$1+0 && $1<THRESHOLD_VALUE)print $1}' | sort -n

$ 1 == $ 1 + 0 гарантирует, что строка является числом, затем она проверит, что она меньше THRESHOLD_VALUE (замените его на любое число, которое вы хотите. Распечатайте его, если оно пройдет, и сортируйте.

3 голосов
/ 27 июля 2011

awk '$1 < NUMBER { print }' FILENAME | sort -n

где NUMBER - это число, которое вы хотите использовать в качестве верхней границы, а FILENAME - это ваш файл с более чем 10000 строками чисел. Вы можете сбросить | sort -n, если не хотите сортировать числа.

edit: Одна небольшая оговорка. Если ваша строка начинается с цифры, она будет обрабатываться как эта цифра. В противном случае он должен игнорировать это.

1 голос
/ 27 июля 2011

Другая альтернатива выглядит следующим образом: function compare() { if test $1 -lt $MAX_VALUE; then echo $1 fi } 2> /dev/null

Посмотрите на help test и man bash для получения дополнительной помощи по этому вопросу. 2> /dev/null перенаправляет ошибки, выданные test, при попытке сравнить что-либо, кроме двух целых чисел. Вызовите функцию как: compare 1 compare -1 compare string A

Только средняя линия выдаст вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...