У меня есть строки данных, которые содержат отдельный столбец и два столбца. То, что я хочу сделать, должно извлечь строки, которые содержат только 2 столбца.
0333 foo
bar
23243 qux
получение только:
0333 foo
23243 qux
Обратите внимание, что они - разделенная вкладка, даже для строк только с одним столбцом, у Вас есть вкладка вначале.
Что путь состоит в том, чтобы сделать это?
Я попробовал это, но сбой:
awk '$1!="";{print $1 "\t" $2}' myfile.txt
enter code here
Вам необходимо использовать переменную NF
(количество полей) для управления действиями, например, в следующей расшифровке:
$ echo '0333 foo
> bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux
Это напечатает строку, если количество полей равно двум, иначе ничего делать не будет. Причина, по которой у меня есть (на первый взгляд) странная конструкция NF == 2 {print} {}
, заключается в том, что некоторые реализации awk
будут печатать по умолчанию, если для строки не найдены правила. Пустая команда {}
гарантирует, что этого не произойдет.
Если вам повезло, и у вас есть один из них, который этого не делает, вы можете обойтись с помощью:
awk 'NF==2'
но первое решение, приведенное выше, будет работать в обоих случаях.