awkは変数、スペースを持つファイルを渡します。

awkは変数、スペースを持つファイルを渡します。

私は初心者で、自分で解決できない小さな問題があります。これが私が直面した問題です:

  • 名前にスペースが含まれているファイルを見つけようとします。

    この部分は動作しています。

      find $(pwd) -type d |grep " "
    
  • その後、awkファイル名全体を印刷し、目的のグループ名を使用する「手動入力」を使用して変更しました。

      find $(pwd) |grep " " |awk '{print "changegrp developers \""$0"\""}'
    
  • developersグループ名を変数に設定しようとすると、実際には期待どおりに機能しません。

      find $(pwd) |grep " " |awk group="developers" '{print "changegrp group \""$0"\""}'
    

本当に構文を理解していません。手動で入力したグループはどのように機能しますか?変数で作成すると機能します。私はこの種のことが一重引用符や二重引用符などを忘れて問題を引き起こす可能性があることを知っています。

私が間違っていることを指摘してもらえますか?

ベストアンサー1

groupawkに必要な変数を渡し、awkにそれを(文字列リテラルではなく)変数として処理させるには、二重引用符の外にする-v group="developers"必要があります。

awk -v group="developers" '{print "changegrp " group " \""$0"\""}'

しかし、次のようなものを使用すると、多くの頭痛を避けることができます。

find . -type d -name '* *' -exec changegrp developers {} \;

または(changegroup複数のファイルパラメータがサポートされている場合 - 特定のコマンドに精通していません。)

find . -type d -name '* *' -exec changegrp developers {} +

また、見ることができます

おすすめ記事