2016-07-26 279 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 –