awk跳过空白行

时间:2012-07-27 11:51:05

标签: regex bash sed awk

我的脚本输出是使用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来完成。 我了解sedtr方式,但我希望awk在上面提到的命令本身中执行此操作,而不是单独的解决方案,如下所示或管道方式。

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

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

4 个答案:

答案 0 :(得分:45)

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

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)不为零(即大于零)的行来工作。

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

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

答案 1 :(得分:9)

你可以添加

/^\s*$/ {next;}  

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

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

答案 2 :(得分:2)

可能你可以试试这个:

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

答案 3 :(得分:1)

试试这个:

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