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 за указание на это).
Вам также не нужны обратные слеши.