2016-07-26 5 views
1

の問題がfile.txtは私が欠けている番号の範囲を印刷しawkコマンドを記述しようとしていた次のファイルAWK - もしelse文

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

とします。範囲に1つの番号だけが含まれている場合は、この番号だけを印刷する必要があります。予想される出力がある

4 
8-14 
18 
21-22 

This postほとんどは、私が

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

にそれを修正しようとした

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

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

1つのライナーで私のために仕事をしたが、期待どおりに動作しません。 。私は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 –