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
Заранее благодарим за ваши предложения и ответы.
Ответы
Ответ 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