ネストされたAwkと変数の比較

ネストされたAwkと変数の比較

私はawkを学ばなければならないことに気づきました。これは本当に素晴らしいことですが、小さな問題に直面しています。

出力がパイプされるように設計されたスクリプトがあります。私たちはそれをマトリックスと呼びます。

また、私が完全に制御し、必要な方法でフォーマットできるローカルテキストファイルblacklist.txtもあります。 1つの列(または値のセット)のみが含まれます。

スクリプトを実行し、パイプし、結果の列値の1つをテキストファイルの各行(またはカンマで区切られた)値と比較し、一致した場合は別の操作を実行したいと思います。

次のコマンドを実行したい(一部の疑似コードを含む)。

matrix username |    // this returns an output and is piped
// I then want to awk in a blacklist of usernames from my file,
//not sure if I should use getline
awk '{print $1}' blacklist.txt
// And now, I would like to compare the two, and execute another command
if($4 from matrix == $1 from blacklist.txt) {
  matrix doSomething
}
else {
  print "Not valid"
}

どんなアドバイスも本当にありがとうございます。ありがとうございます。

ベストアンサー1

これは、次の2つの機能を使用して実行できますawk

  1. 文字列でインデックス付けされた配列
  2. 組み込み変数FILENAME

スクリプトはデフォルトのフィールド区切り文字を使用し、1blacklist.txt行に1つのフィールドを含みます。ニーズに合わせて調整してください。

#!/bin/sh

awk '
    FILENAME == "blacklist.txt" {
        blacklist[$0] = 1
        next
    }
    blacklist[$4] {
        print $4, $0
    }
' blacklist.txt -

おすすめ記事