Фильтрация строк на основе количества столбцов с AWK

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

0333 foo
 bar
23243 qux

дает только:

0333 foo
23243 qux

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

Каким образом это сделать?

Я попробовал это, но не смог:

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

enter code here

Ответы

Ответ 1

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

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

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

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

awk 'NF==2'

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

Ответ 2

awk 'NF==2' file

Ответ 3

awk '(NF==2){print}' test.txt