awk-if столбец = null
используя awk, как бы вы назначили "null" значение для чтения?
Я уверен, что для этого есть установленный символ, я просто не могу его найти.
например,
У меня есть строка awk, как это:
awk '
==24{print "stuff"}
==23{print "stuff"}
'
Мне нужно знать, как учитывать пустые столбцы, используя тот же формат, так что если $3 = пусто {печатать "вещи"}
спасибо!
2 ответов
попробуйте сделать это :
awk '
==24{print "stuff"}
==23{print "stuff"}
!{print "null"}
' file.txt
Если вам нужно обработать если это ноль (
false
на awk
), попробуйте сделать это :
! && != 0{print "null"}
в обработке awk по умолчанию нет такой вещи, как "пустой" столбец.
поля разделяются пробелами, т. е. на один или пробелы (вкладки и пробелы, в основном). Итак, учитывая этот ввод:
this that the_other
foo bar
для первой строки ,
и
are
this
, that
и the_other
, соответственно, а для второй строки bar
и , независимо от того, сколько пробелов между первым и вторым поля.
у вас могут быть пустые поля, если вы укажете другой разделитель полей:
$ ( echo 'this:that:the_other' ; echo 'foo::bar' ) | awk -F: '{print }'
the_other
bar
или, если вы предпочитаете установить разделитель полей в самом скрипте:
$ ( echo 'this:that:the_other' ; echo 'foo::bar' ) | \
awk 'BEGIN { FS = ":" } {print }'
the_other
bar
но вы можете использовать регулярное выражение в качестве разделителя полей:
$ ( echo 'this that the_other' ; echo 'foo bar' ) | \
awk 'BEGIN { FS = "[ ]" } {print }'
the_other
bar
(часть очень старые реализации Awk могут не поддерживать регулярные выражения здесь.)
регулярное выражение "[ ]"
не получает то же самое специальное лечение, которое делает космический персонаж.
ссылки на руководство GNU Awk:
разделение полей по умолчанию:
поля обычно разделяются последовательностями пробелов (пробелами, вкладками, и newlines), а не отдельными пробелами. Два пробела подряд не разделите пустое поле. Значение по умолчанию разделителя полей
FS
is строка, содержащая один пробел," "
. Если awk интерпретировал это значение в обычном таким образом, каждый символ пробела будет разделять поля, поэтому два пробелы в ряду образовывали пустое поле между ними. Причина этого не происходит, так как одно пробел как значениеFS
- это особый случай -- используется для указания способа разграничения по умолчанию поля.если
FS
любой другой одиночный символ, такой как","
, то каждое вхождение что разделяет два поля. Два последовательных вхождений разделите пустое поле. Если характер происходит в начале или конец строки, который тоже ограничивает пустое поле. Пространство символ-это единственный символ, который не следует этим правила.
и использование регулярных выражений для разделения полей.
но будьте осторожны с этим; либо вам придется изменить файл, чтобы использовать другой разделитель, или ваш разбор будет чувствительна к количеству пробелов между полями (foo bar
(один бланк) быть отличным от foo bar
(С двумя пробелами)).
в зависимости от вашего приложения вы можете рассмотреть разбор строк по номеру столбца, а не по полям, распознанным awk.