在复制符合条件的行时,计算并替换为awk

时间:2017-04-21 02:44:43

标签: awk

我的文本文件中的数据看起来像这样:

* *
18.442 24.661 32.45 53.061 62.039 100.303 113.257 123.638 131.444 142.779 149.064 
* *
* *
* *
27.788 49.938 132.166 139.538 
* *
12.224 19.48 29.61 36.646 57.56 107.559 114.111 122.871 135.943 145.89 
* *
14.162 21.568 28.105 34.322 42.914 52.978 100.12 106.172 112.79 
* *
* *

我想用awk来计算每一行的条目数(计数“。”)没问题。如果该行只有“*”,那么我想复制文本文件的原始行。

我希望输出看起来像这样:

* *
11
* *
* *
* *
4
* *
10
* *
9
* *
* *

然而,现在我能找到的最佳方法是:

awk -F\. '{print NF-1}' myfile.txt

但这显然在“*”行中给了我0。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用条件运算符检查记录是否只有空格* s:

$ awk '{ print ( /[^ *]/ ? NF : $0 ) }' file
* *
11
* *
* *
* *
4
* *
10
* *
9
* *
* *