Подтвердить что ты не робот

Awk пропустить пустые строки

Вывод моего script является разделителем табуляции с использованием awk как:

awk -v variable=$bashvariable  '{print variable"\t single\t" $0"\t double"}' myinfile.c

Команда awk запускается в цикле while, который обновляет значение переменной и файл myinfile.c для каждого цикла. Я получаю ожидаемые результаты с помощью этой команды. Но если inmyfile.c содержит пустую строку (она может содержать), она не печатает никакой соответствующей информации. могу ли я сказать awk игнорировать пустую строку?

Я знаю, что это можно сделать, удалив пустые строки из myinfile.c, прежде чем передавать его на awk. Я знаю способ sed и tr, но я хочу, чтобы awk выполнял его в вышеупомянутой команде, а не в отдельном решении, как показано ниже, или в канале.

sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c

Заранее благодарим за ваши предложения и ответы.

4b9b3361

Ответ 1

Есть два подхода, которые вы можете попытаться отфильтровать строки:

awk 'NF' data.txt

и

awk 'length' data.txt

Просто поставьте их в начале вашей команды, т.е.

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile

или

awk -v variable=$bashvariable 'length { print variable  ... }' myinfile

Оба они действуют как привратники /if -statements.

Первый подход работает только при печати строк, где число полей (NF) не равно нулю (т.е. больше нуля).

Второй метод рассматривает длину строки и действует, если длина не равна нулю (т.е. больше нуля)

Вы можете выбрать подход, наиболее подходящий для ваших данных/потребностей.

Ответ 2

Вы можете просто добавить

/^\s*$/ {next;}  

Наверху вашего script, который будет соответствовать пустым строкам и пропустить остальные правила соответствия awk. Объедините все это:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c

Ответ 3

Возможно, вы можете попробовать:

awk -v variable=$bashvariable  '$0{print variable"\t single\t" $0"\t double"}' myinfile.c

Ответ 4

Попробуйте следующее:

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c