2016-07-26 193 views
1

file.txt问题是下列文件AWK - 如果有else语句

1 
2 
3 
5 
6 
7 
15 
16 
17 
19 
20 
23 
24 

我试图写一个awk命令,打印数字,它缺少的范围。当范围只包含一个数字时,则应打印此数字。预期的输出是

4 
8-14 
18 
21-22 

This post几乎做的工作,我与一个衬垫

awk '$1!=p+1{print p+1"-"$1-1}{p=$1}' file.txt 

4-4 
8-14 
18-18 
21-22 

我试图修改它

awk 'if ($1!=p+1){if (p+1!=$1-1) {print p+1"-"$1-1} else {print p+1} }{p=$1}' file.txt 

但预计它不工作。我似乎误解了if-else语法。我究竟做错了什么?

+0

阅读第一夫妇的书有效AWK编程页,第4版,由阿诺德·罗宾斯来解决这个问题。然后阅读本书的其余部分:-)。 –

回答

3

您可以使用:

awk '$1 != p+1 {print p+1 ($1-1 > p+1 ? "-" $1-1 : "")} {p=$1}' file 

4 
8-14 
18 
21-22 
+1

对不起,我忘了检查你的答案(或回应你的评论)。是的,它运行良好。我已经使用了很多,并修改了很多。谢谢! +1 –