awk跳过空白行

Gil*_*Gil 26 regex bash awk sed

我的脚本的输出是使用awkas作为制表符分隔的:

awk -v variable=$bashvariable  '{print variable"\t single\t" $0"\t double"}' myinfile.c
Run Code Online (Sandbox Code Playgroud)

awk命令在while循环中运行,该循环更新每个循环的变量值和文件myinfile.c. 我用这个命令得到了预期的结果.但是如果inmyfile.c包含一个空行(它可以包含),则它不会打印任何相关信息.我可以告诉awk忽略空行吗?

我知道可以通过从myinfile.c中删除空行然后再将其传递给它来完成awk.我知道sed并且tr方式但我想awk在上面提到的命令本身中做,而不是如下所示的单独解决方案或管道.

sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c
Run Code Online (Sandbox Code Playgroud)

提前感谢您的建议和回复.

Lev*_*von 50

您可以尝试过滤掉两种方法:

awk 'NF' data.txt
Run Code Online (Sandbox Code Playgroud)

awk 'length' data.txt
Run Code Online (Sandbox Code Playgroud)

只需将这些放在命令的开头,即

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile
Run Code Online (Sandbox Code Playgroud)

要么

awk -v variable=$bashvariable 'length { print variable  ... }' myinfile
Run Code Online (Sandbox Code Playgroud)

这两个都充当了守门人/ if语句.

第一种方法仅通过打印出field(NF)数不为零(即大于零)的行来工作.

第二种方法查看行长度,如果长度不为零(即大于零)则起作用

您可以选择最适合您的数据/需求的方法.


ben*_*y23 10

你可以添加

/^\s*$/ {next;}  
Run Code Online (Sandbox Code Playgroud)

在脚本的前面,它将匹配空行并跳过其余的awk匹配规则.把它们放在一起:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c
Run Code Online (Sandbox Code Playgroud)