Awk действует как замена

У меня есть список массивов с различной информацией, по которой я делаю awk.

number  location  length  value

 1        2         40     0.96
---       5         45     0.97
 4        5         47     0.96
---       5         35     0.95
 2        5         60     0.95
---       3         55     0.96


awk '{if ($2=5 && $3 >= 40 && $3<=50 && $6>=0.96) print $0}' Infile.txt

Это дает мне правильный ряд --- 5 45 0.97 а также 4 5 47 0.96, Однако, если я хочу добавить еще одно условие, например, $1= ---, чтобы иметь только первый вывод --- 5 45 0.97

 awk '{if ($2=5 && $3 >= 40 && $3<=50 && $6>=0.96 && $1="\-\-\-") print $0}' Infile.txt >List_position.txt

он действует как замена, возвращая предыдущий вывод как 1 5 45 0.97 а также 1 5 47 0.96, Я пробовал с $1=---, $1='\-\-\-' и они оба не работали. Если я попробую с $1="---", он заменяет $1 на ---,

Я новичок в awk, и я действительно не понимаю, почему он делает замену. Если " " это замена в awk, как я могу поставить условие на ---?

1 ответ

Решение

Вы выполнили задание = вместо сравнения == (и результат присваивания оценивается как true, потому что это не 0 и не пустая строка).

awk '{if ($2==5 && $3 >= 40 && $3<=50 && $6>=0.96 && $1=="---") print }' Infile.txt >List_position.txt

У вас также есть= против ==проблема с $2=5 назначение в условии, но вы этого не заметили, потому что ожидали увидеть там 5 (и спасибо jaypal singh за указание на это).

Вам также не нужны обратные слеши.

Другие вопросы по тегам