Фильтрация строк по количеству столбцов с помощью AWK - PullRequest
19 голосов
/ 03 августа 2010

У меня есть строки данных, которые содержат один столбец и два столбца. Что я хочу сделать, это извлечь строки, которые содержат только 2 столбца.

0333 foo
 bar
23243 qux

только урожайность:

0333 foo
23243 qux

Обратите внимание, что они разделены табуляцией, даже для строк только с одним столбцом у вас есть вкладка в начале.

Как это сделать?

Я пробовал это, но не получилось:

awk '$1!="";{print $1 "\t" $2}' myfile.txt

enter code here

Ответы [ 3 ]

28 голосов
/ 03 августа 2010

Вам необходимо использовать переменную NF (количество полей) для управления действиями, например, в следующей расшифровке:

$ echo '0333 foo
>  bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux

Это напечатает строку, если число полей равно двум, иначе это ничего не будет делать. Причина, по которой у меня есть (на первый взгляд) странная конструкция NF==2{print}{}, заключается в том, что некоторые реализации awk будут печатать по умолчанию, если для строки не найдены правила Пустая команда {} гарантирует, что этого не произойдет.

Если вам повезло иметь одного из тех, кто этого не делает, вы можете обойтись без:

awk 'NF==2'

, но первое решение, приведенное выше, будет работать в обоих случаях.

9 голосов
/ 03 августа 2010
awk 'NF==2' file
5 голосов
/ 03 августа 2010
awk '(NF==2){print}' test.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...