awk は一度に複数の変数に割り当てます。

awk は一度に複数の変数に割り当てます。

文字列から2つの数値を取得し、それを使用して変数に割り当てようとしていますawkgawkこれは私が具体的に使用するものです)。 tmuxバージョン文字列のメジャーバージョン番号とマイナーバージョン番号を変数として抽出したいと思いますawk。たとえば、次のようになります。

  • 入力:tmux 2.8;maj == 2min == 8
  • 入力:tmux 1.9a;maj == 1min == 9
  • 入力:tmux 2.10;maj == 2min == 10

私の入力が標準入力から来ていると仮定すると、tmux -V現在は次のようになります。

tmux -V | awk '{
                  maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2);
                  min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2);
                  # ...do something with maj and min...
               }'

これはうまくいきますが、多くのtmuxユーザーが知っているように、ファイルif-shellから.tmux.conf(私はこれを使いたかった)簡単に結果をもたらすことができます。本物構成ファイルの行がかなり長いため、スペースを節約するためにこれら2つの変数割り当てを1つのステートメントに結合する方法があるかどうか疑問に思います。あるいは、入力からこれら2つの変数を収集し、スペースを節約する別の方法があるかどうか疑問に思います。

私は次のことを考えています:

awk '{ maj, min = +gensub(/([0-9]+)\.([0-9]+).*/, "\\1 \\2", "g", $2); }'

... Pythonに似ていますが、特定の構文を使用するとawk他のものは可能ですか?

読みやすさは実際には問題ではなく、長さだけです。

ベストアンサー1

GNU awkを使用しているので、3-arg形式を使用してmatch()複数のキャプチャグループを保存できます。

awk '
    match($0, /([0-9]+)\.([0-9]+)/, m) {maj=m[1]; min=m[2]; print maj, min}
' <<END
tmux 2.8
tmux 1.9a
tmux 2.10
END
2 8
1 9
2 10

https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html

おすすめ記事