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

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

0333 foo
 bar
23243 qux

получение только:

0333 foo
23243 qux

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

Что путь состоит в том, чтобы сделать это?

Я попробовал это, но сбой:

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

enter code here
19
задан neversaint 3 August 2010 в 05:53
поделиться

3 ответа

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

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

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

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

awk 'NF==2'

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

29
ответ дан 30 November 2019 в 03:07
поделиться
awk 'NF==2' file
9
ответ дан 30 November 2019 в 03:07
поделиться
awk '(NF==2){print}' test.txt
5
ответ дан 30 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: