AWK удаляет пустые строки

/./ удаляет пустые строки только для первого условия { print "a"$0 }, как бы гарантировать, что script удаляет пустые строки для каждого условия?

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile

Ответ 1

Поместите следующие условия внутри первого и проверьте их с помощью операторов if, например:

awk -F, '
    /./ { 
        print "a"$0; 
        if (NR!=1) { print "b"$0 } 
        print "c"$0 
    } 
    END { print "d"$0 }
' MyFile

Ответ 2

Команда Awk для удаления пустых строк из файла:

awk 'NF > 0' filename

Ответ 3

Более короткая форма уже предлагаемого ответа может быть следующей:

awk NF file

Любой awk script следует синтаксису condition {statement}. Если блок оператора отсутствует, awk будет печатать всю запись (строку), если condition не равен нулю.

NF variable in awk представляет количество полей в строке. Поэтому, когда строка не пуста, NF удерживает положительное значение, которое запускает действие по умолчанию awk (печатает всю строку). В случае пустой строки NF равен нулю, и условие не выполняется, поэтому awk ничего не делает.


или

awk '!/^$/' file

^$ является регулярным выражением для пустой строки. 2 / необходим, чтобы awk понять, что строка является регулярным выражением. ! является стандартным отрицанием.

Ответ 4

если вы хотите игнорировать все пустые строки, поместите это в начало script

/^$/ {next}