2012-07-27 133 views
23

我的腳本的輸出被製表符分隔的使用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 

在此先感謝您的建議和答覆。

回答

38

有兩種方法可以嘗試過濾掉線:

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語句。

第一種方法的工作原理是隻打印出字段數(NF)不爲零(即大於零)的行。

第二種方法着眼於線的長度和如果長度是不爲零的行爲(即,大於零)

可以挑選最適合你的數據/需求的辦法。

2

可能是你可以試試這個:

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

試試這個:

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

您可以只添加

/^\s*$/ {next;} 

到腳本的前面,將匹配空白行並跳過其餘的awk匹配規則。把它放在一起:

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