найти значение столбца * с помощью awk - PullRequest
0 голосов
/ 07 ноября 2019

В настоящее время у меня есть файл с несколькими столбцами, и в моих 4,5-х столбцах нулевые значения отображаются как *

Я пробовал


awk '{if ($4==/*) {print}}' filename
awk '{if ($4==\*) {print}}' filename
awk '{if ($4=='*') {print}}' filename
awk '{if ($4=='\*') {print}}' filename
awk '{if ($4=='/*/') {print}}' filename

для

awk '{if ($4=='/*/') {print}}' filename
awk '{if ($4==/*/) {print}}' filename

они запускаются, но ничего не распечатывает (но я знаю, что в файле есть * значения)

, а остальные получают синтаксическую ошибку или ошибку регулярного выражения

чтоя могу сделать, чтобы это исправить ???

Ответы [ 3 ]

2 голосов
/ 07 ноября 2019

awk строки заключены в двойные кавычки. Скрипт awk обычно помещается в одинарные кавычки, и если вы также используете одинарные кавычки вокруг строк awk, они будут завершать строку оболочки, а не разграничивать строку awk (а одинарные кавычки оболочки не обеспечивают какой-либо экранирующий механизм). ).

awk '$4 == "*"' filename

Условие для обработки строки ставится перед действием, и если нет блока действия, по умолчанию выводится строка. Так что это выше эквивалентно:

awk '{if ($4 == "*") print}' filename
1 голос
/ 08 ноября 2019

Использование шаблона awk для реализации условия

awk '$4 == "*" || $5 == "*" { print }'

Or Even
awk '$4 == "*" || $5 == "*"'
0 голосов
/ 07 ноября 2019

Я бы использовал функцию index():

awk 'index($4""$5, "*")' file

index(s, t), возвращающую позицию подстроки t в s или 0, если t не был найден вs.

Приведенная выше программа использует функцию index() в качестве условия. awk напечатает текущую строку, если это условие станет истинным. 0, не найден, является ложным в awk. Более явная версия вышеупомянутой программы была бы:

awk '{if(index($4""$5, "*") != 0){print}}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...