2

Это совсем не легко объяснить, но просто показать.

У меня есть строки в файле, такие как:

100Dollars              3              IP  
200Dollars              3              IP
300Dollars              4              IP

Мне нужно grep для строк, которые не имеют «3» во втором столбце. Я попробовал следующее:

egrep -v '3' filename

Однако это не возвращает третью строку из-за наличия 3 в первой части. Вот мой основной вопрос, если это имеет смысл.

Как исключить то, что находится в первом столбце, и только grep для того, что находится во втором столбце?

4 ответа4

5

Как насчет:

awk '$2 != 3' filename
2

Я думаю, что вы хотите перейти на awk или grep, который может делать столбцы (среди многих других вещей)

gawk '$1 ~ /3/ && $2 !~ /3/{print $0}' < filename

Должен сделать это.

При этом ищется 3 в первом столбце (столбцы нумеруются, начиная с 1 в awk, $ 0 - вся строка), а не 3 во втором столбце, и если это так, выведите всю строку ($ 0)

2

Ты можешь использовать:

grep -v -P '\t3\t' filename

-P - средство сопоставления регулярных выражений в стиле Perl.

1

Разве вы не можете просто выполнить grep -v " 3 " , предполагая, что столбцы разделены пробелами?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .