awk - быстрый выбор строк без пропущенных значений - PullRequest
0 голосов
/ 05 февраля 2019

Учитывая csv-файл, мне нужно пропустить строки с любыми пустыми полями.Количество полей x фиксированное и известное, но большое.

Использование простого NF == x { commands } завершается неудачно, так как NF считается на основе разделителей, и их вхождение надежно и независимо от значения вхождения.

Цикл по всем полям с другой стороны успешно, нокажется довольно медленным подходом:

{
for ( i=1 ; i<=NF ; i++ ) {
    if ( $i == "" ) { next }
    else if ( i == NF ) { commands }
    }
}

Существует ли быстрый и элегантный способ выбора строк без пустых полей?


Примечание:

Iя знаю о решениях sed или grep, которые ищут разделители в начале / конце строки и два вспомогательных разделителя - это часть более сложного awk -скрипта.


Файл примерадолжны быть выбраны строки 1 и 4:

11,12,13,14,15,16
21,22,,24,25,26
31,,33,34,35,36
41,42,43,44,45,46
,52,53,54,55,56
61,62,63,64,65,

1 Ответ

0 голосов
/ 05 февраля 2019

или не используйте определения полей

$ awk '!/(^|,)(,|$)/' file

11,12,13,14,15,16
41,42,43,44,45,46

, что также можно сделать с помощью sed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...