2013-06-19 2 views
0

У меня есть список массивов с различной информацией, на которой я делаю 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, как я могу поставить условие на ---?

ответ

3

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

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

У вас также есть «= против ==» проблемы с $2=5 присвоения в состоянии, но вы не заметили, потому что вы ожидали увидеть 5 там (и благодаря JS웃 за указание, что выход) ,

Вам также не нужны обратные косые черты.

+0

+1 для обладания глазами ястреба! –

+0

Спасибо! Итак, '=' вместо '==' изменяет $ 1 за то, что происходит после? – Renaud

+0

На самом деле '$ 2 = 5' хорошо написано в моем скрипте как' $ 2 == 5'. Я должен был видеть разницу – Renaud

Смежные вопросы