問題101 別解3 について ```bash ... | awk 'BEGIN{n=$0}{if($0 - n <= 1){printf $0" " }else{printf "\n"$0" "} n=$0}END{print}' ``` ここまでの部分を実行すると ```console 97 98 99 101 102 105 106 107 108 112 113 114 117 119 121 122 122 ``` となって最後の `122` がひとつ余計に出力されます[^1]。 [^1]: 全体のコマンドラインの最後の方の出力を整える処理 (`awk 'NF>=2{print $1"-"$NF}NF==1{print}'`) によって解消してはいますが…。 また、 `BEGIN{n=$0}` の `$0` も実効がないと思われます。というわけで、当該のコードはより適切には ```bash awk 'BEGIN{n=0}{if($0 - n <= 1){printf $0" " }else{printf "\n"$0" "} n=$0}END{print ""}' ``` となるべきではないかと考えます。 瑣末な部分に対する指摘で恐縮ですが、以上、ご確認のほどよろしくお願いいたします。
Activity
greymd commentedon Sep 13, 2026
ご指摘ありがとうございます!確認しました。
確認しましたが、確かに冗長な箇所でしたね。。
ご認識の通り、
END{print}によって最後の$0が再度出力されており、後段の処理で結果的に吸収されているものの、無駄な処理になっていました。なお、
BEGIN内の$0は空であり、数値としては0として扱われるため、BEGIN句自は実質的な意味がありません。この別解は私が記載したものですが、試行錯誤の過程で不要な記述が残ったものと思われます。
さらに確認したところ、AWKでは未初期化変数が数値文脈で
0として扱われるため、BEGIN節自体を省略できます。また、
END節を省略して末尾に改行が付かなくても、直後のperl -nはEOFまでの最終行を処理するため、今回のパイプラインでは問題ありません。したがって、該当部分は次のように簡略化できそうです。
awk '{if ($0-n <= 1) {printf $0" "} else {printf "\n"$0" "} n=$0}'最終的な出力に影響する誤りではありませんが、解答例として改善できる点ですので、README.mdと回答ファイルに記載しておきました( #80 )。
ご指摘ありがとうございました。