Awk удалить строку, содержащую данные - PullRequest
8 голосов
/ 28 октября 2011

Я хочу удалить строку, если она содержит указанное значение.

2 5 8
1 3 7
8 5 9

Итак, если я хочу удалить строку, содержащую 7 в качестве третьего поля:

{
if($3 == 7){
####delete the line
}
}

Ответы [ 3 ]

18 голосов
/ 28 октября 2011

Достаточно сказать

$ awk '$3 != 7'

Обратите внимание, что это числовое сравнение, и в нем пропущены строки, в которых третье поле, например, "0.7e1", но оно будет работать для предоставленных вами выборочных данных.

9 голосов
/ 28 октября 2011

удалить строку, содержащую 7

awk '!/7/' yourFile
6 голосов
/ 28 октября 2011

Остальные ответы работают.Вот почему

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

В вашем примере кода не используется совпадение отрицания: он говорит: «если что-то верно, сделайтеЭто".Поскольку вы хотите удалить ввод, когда вы соответствуете этой цели, вы можете просто пропустить печать.

{
  if($3 == 7){
     #skip printing this line
     next
  }
}

IHTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...