Как использовать предоставленный greped url от tshark внутри сценария bash?

Для уточнения, только строки, поступающие из нескольких источников (здесь цитируется спецификация POSIX):

  1. Переменные поля
  2. Ввод из функции getline()
  3. FILENAME
  4. Элементы массива ARGV
  5. Элементы массива ENVIRON
  6. Элементы массива, созданные функцией split()
  7. Назначение переменной командной строки
  8. Назначение переменной из другого числового строковая переменная

должна считаться числовой строкой , если ее значение оказывается числовым (допуская начальные и конечные пробелы, с вариациями между реализациями для поддержки шестнадцатеричного, восьмеричного, inf, nan...) .

Литеральная строковая константа "3.14" является строкой, а не строкой, поскольку она не получена ни из одного из этих источников.

x = "3.14"; if (x == 3.14) print "yes"

печатает да, но это потому, что он выполняет лексическое сравнение (в зависимости от реализации, используя memcmp(), strcmp() или strcollate() ) из 3.14 и преобразование в строку (через строку формата CONVFMT, %.6g в gawk и многих других реализациях) этого номера 3.14. То есть с этим значением CONVFMT, (x == 3,14) совпадает с (x == "3,14").

(x будет ложным, потому что 3.14 сортируется лексически после 12 (то же, что ("3.14" ). С CONVFMT = "%.6e", (x == 3.14) также вернет false, потому что это становится ("3.14" == "3.140000e+00") .

С другой стороны, в:

"echo \"3.1400 \"" | getline x
if (x == 3.14) print "yes"
if (x < 12) print "yes"

yes печатается дважды независимо от значения CONVFMT, потому что выполняется численное сравнение. x — это strnum, потому что он получен из getline и имеет числовое значение.

Тем не менее, он по-прежнему сохраняет свое строковое значение. print x напечатает "3.1400" независимо от значения OFMT или CONVFMT.

И:

"echo 3.14 foo" | getline x
if (x == 3.14) print "yes"

Не печатает да. x происходит от getline, но не имеет числового значения (из-за foo). Это обычная строка, как если бы вы написали x = "3.14 foo". Тем не менее, вы сможете выполнять с ним числовые операции:

print x + 1

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

Итак, (x+0 == 3.14) и (x+0 также вернут true. x+0 является числовым, поэтому у нас есть числовое сравнение.

Обратите внимание, что inf, nan, Infinity не распознаются как числа с плавающей запятой inf или nan. специальные значения в качестве констант, но в некоторых реализациях awk вы можете вместо этого использовать ("inf"+0).

1
13.04.2016, 11:28
0 ответов

Теги

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