アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windowsのバッチファイルにて、以下の構文を実行しますと、

―――――――――――――――――――――

echo.123|awk "/[0-9]/"

―――――――――――――――――――――

以下のような結果になるのですが、

―――――――――――――――――――――

buffer: 1
123

―――――――――――――――――――――

この「buffer: ~」を出力しないように出来ないでしょうか。

WEBで調べて色々試してみたのですが、なかなか実現出来ずにいます。

ご存知の方がおられましたら、お教え頂けないでしょうか。

A 回答 (4件)

今一番新しい GNU awk は 4.2.0 で, 言語を無視すれば例えば


https://ja.osdn.net/projects/sfnet_ezwinports/
からダウンロードできます.
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

自分では最新版を探せなかったので非常に助かりました。ありがとうございます。

他のAWKも含め、5種類くらいテストさせて頂きましたが、「buffer: ~」が表示されず、尚且つ、日本語を大量に含むスクリプトでも正常な動作をしたのは、唯一、最新版のGNU AWKのみでした。

ですので、今後はこちらを使わせて頂こうと思います。

Wr5さんのご教示も非常に勉強になりました。私の中ではどちらもベストアンサーです。お二人とも本当にありがとうございました。助かりました。

お礼日時:2018/02/27 20:07

># ソースは確認していないですが。



で、ソースを確認した。

"buffer: %s\n"ってのが、dfa.cのmatch_mb_charset()に「追加」されています。
デバッグ用に追加されたコードでしょうかねぇ。
オリジナルと思われる"gawk-3.1.6.tar.gz"のmatch_mb_charset()にはそんなもの入っていないので、デバッグ用に追加して削除し忘れたもの…である可能性が高そうです。

より新しいバージョンのWindows版GNU awkが取得できるところがあれば…また別の結果になるやも知れませんが。
    • good
    • 0
この回答へのお礼

再度、ご回答ありがとうございます。

> デバッグ用に追加して削除し忘れたもの…である可能性が高そうです。

そうなのですね。私はプログラミングが出来ないので非常に参考になります。

「! /^buffer: /」での処理も良いとは思うのですが、滅多に無いとは思いますが、入力データどこかの行頭に「buffer: 」がある場合にまずいという点と、正規表現で行をマッチさせる処理は頻繁に使うと思うので、その度に「|awk "! /^buffer: /"」が付いているとコードがやや煩雑になってしまう点が少し気になっています。

もし、GNUのAWKでデバッグ用コードの消し忘れがあるのなら、むしろ、他の「mawk」や「jgawk」の方がきちんとしているのかも知れないですね。私がちょっとGNUを過信し過ぎていたのかも知れません。

ちょっと、別バージョンのGNUのAWKや、他のAWKも色々と動作テストしてみようと思います。良いAWKが見付からなければ、「! /^buffer: /」の方法を使わせて頂こうと思います。ありがとうございます。

お礼日時:2018/02/27 17:55

>使用しているAWKは、GNUのものです。



http://gnuwin32.sourceforge.net/packages/gawk.htm
から取得。
# ソースは確認していないですが。

>お教え頂いた対処法ですと、「123」まで出力されなくなってしまいますので、ちょっと今回のケースでは使えないです。すみません。

「buffer: ~」は標準エラー出力ではなかった…ようで。
パイプでさらに繋げてみました。

echo.123|awk "/[0-9]/"|awk "! /^buffer: /"
でどうでしょう?
# なんぞオプション指定でカットでき…るような気もしますけども。
    • good
    • 0

で、そのawkの素性は?



>この「buffer: ~」を出力しないように出来ないでしょうか。

標準エラー出力…だったりしませんか?
その場合は、標準エラー出力の内容をリダイレクトして捨てる感じでしょうかね。
http://tooljp.com/windows/doc/stdout-stderr/stdo …
https://qiita.com/uhooi/items/b8b25761a5c4efe9025a
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

使用しているAWKは、GNUのものです。

そこに同梱されている、「gawk」「pgawk」等でも同じ結果となります。

他のAWKですと、「mawk」や「jgawk」では当該の一文は出力されません。

お教え頂いた対処法ですと、「123」まで出力されなくなってしまいますので、ちょっと今回のケースでは使えないです。すみません。

エラー自体は、コマンドプロンプトが出しているのではなくて、AWKが出しているような気がします。

GNUのAWKが一番メンテナンスされている気がするので、出来ればGNUのものを使いたいのですが、他のものが良さそうなら、そちらを使おうかとも思います。

正規表現にマッチした行を、余計な出力を出さずに表示したいだけなので、それくらいシンプルな処理なら、GNUのAWKで十分可能なはずだと思うのですが、いかんせんAWK初心者なので、方法が分からず困っています。

お礼日時:2018/02/27 13:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!