awkのミラーの削除中の使い方と説明

3242 ワード

「Dockerテクニック:Dockerコンテナとミラーを削除する」という記事を見て、noneというラベルのミラーを削除する方法について説明しました.awkが使用されているので、調べてみます.次に例を示します.
docker rmi $(docker images | awk '$1 == "" && $2 == "" {print $3}')

多くの長い命令が分からないときは短いものに分解して勉強して理解することができます.ここで「$()」の文は単独で取り出すことができます.
docker images | awk '$1 == "" && $2 == "" {print $3}'

この文は、次の2つのステップとしても使用できます.
  • docker images:ローカルミラーのリストをクエリーします.
  • awk:テキスト分析ツール、ここでの「'$1 == "" && $2 == "" {print $3}'」はその判断条件と具体的な操作である.

  • 理解しやすいように、ここでは文を簡略化します.
    docker images | awk '{print $0}'
    #     :
    REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
    mono/jexus              6.24                1972cdc31613        4 days ago          727.9 MB
    

    次に、結果を次の2つの文と比較します.
    docker images | awk '{print $1}'
    #     :
    REPOSITORY
    mono/jexus
    
    docker images | awk '{print $3}'
    #     :
    IMAGE
    1972cdc31613
    

    $」後のパラメータがそれぞれ対応する結果が規則的であることは容易である.実際、awkは、テキストファイルが構造化されていると考えられ、各入力行をレコードとして定義し、行の各文字列をドメイン(セグメント)として定義し、ドメインとドメインの間に分割子を使用して分割します.awkは、行ごとに1つの分割を行い、分割された「セグメント」を対応するコマンドで処理します.
  • 行の作業モードで、ファイルの各行を読み込んで、1行の内容を$0に保存します.
  • は、内蔵変数FS(セグメントの区切り文字、デフォルトは空白文字)を使用して、この行を分割し、分割された各セグメントを対応する変数$(1-100)に格納する.
  • 出力時に内蔵変数OFS(out FS)に従う.
  • 次の行を読み込んで操作を続行します.

  • 一方、'$1 == "" && $2 == "" {print $3}'$1 == "" && $2 == ""は、行ごとに分割された第1フィールドおよび第2フィールドが「」であることを意味し、{print $3}が実行され、行レコードのミラーIDが出力される.ここでは、名前とラベルがnoneのミラーを削除するには、docker rmi ImageIDでミラーを削除するしかないので、最後に行全体の記録を出力する必要はなく、ミラーのidを出力するだけでよいが、ミラーidは1行の記録が分割された3番目の$3にあるので、{print $3}でよい.組み合わせてみましょう
    docker rmi $(docker images | awk '$1 == "" && $2 == "" {print $3}')

    awkで希望のテキストを得ることができ、dockerの他のコマンドと組み合わせて多くの興味深い機能を実現することができます.awkの詳細については「Shellスクリプトのawk詳細」を参照してください.ここではバックアップです.Dockerに関する命令は『Dockerの学習--命令使用の詳細』を参照してください.
    また、いくつかのコマンドの組み合わせが必要であれば、$()でコマンドをネストすることができます.
    #        ID  
    docker images -q

    および
    #      ID       +       
    docker rmi ImageID

    組み合わせて
    #        
    docker rmi $(docker images -q)

    同様に、自分の状況に応じて他のコマンドを組み合わせたり、awkでテキストを処理したりすることで、より興味深い機能を実現することができます.あとdockerの命令に慣れていなければ
    #          
    docker COMMAND --help
    #   :
    docker rmi --help
    #     
    Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    Remove one or more images
    
      -f, --force        Force removal of the image
      --help             Print usage
      --no-prune         Do not delete untagged parents

    ここにはすべての使い方を列挙することはできません.必要もありません.もしあなたが自分で使い方をマスターすれば、しっかり覚えてもいいし、自分で必要な命令を組み合わせることもできます.
    参考文献:
  • Shellスクリプトのawk詳細
  • Dockerの学習--コマンド使用の詳細;