最初のファイルの内容を2番目のファイルの内容と一致させて3番目のファイルを作成します。

最初のファイルの内容を2番目のファイルの内容と一致させて3番目のファイルを作成します。

最初のファイルのサンプルデータfirst.txtは次のとおりです。

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.3,Web Server,comments4,httpd is latest version,myappcode15
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11
.....

サンプルsecond.txt

whatever,10.0.0.1,Web Server,date,whatever,here is JBOSS on the server,myappcode1
watever1,whatever2,10.0.0.3,here is App server,comments4,myapp17,myappcode15
whatever,10.0.0.7,check for test_WebLogic_version version,comments5,date,myappcode2
whatever,whatever,10.0.0.13,App Server,here is JBOSS,myapp17,myappcode15
whatever,whatever,whatever,10.0.0.12,Web Server,here on_windows is the latest version,whatever,
.....

必要:

first.txt1列目の最初の単語と4列目の行に存在することを確認する必要があります。second.txt

third.txtしたがって、

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
.....

Third.txt には次の 2 つの項目を含めないでください。

10.0.0.13,App Server,comments4,jboss is old version,myappcode15  ---->  `httpd` did not match `here is App server`
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11  ---->  `10.0.0.2` did not match `10.0.0.12`

私が知っていることは次のとおりですが、きれいに整理することはできません。

  1. first.txtの最初と4番目の列から最初の単語を取得します。

    cat first.txt | cut -d, -f1 ---> 最初の列を提供します。

    cat first.txt | cut -d, -f4 | awk 'NR==1{print $1}' ---> 4列目の最初の単語を取得します。

  2. GrepはSecond.txtの列1と4の最初の単語を探します。

    cat second.txt | grep -w <first column> | grep -i 'first word of fourth column' --->ここで助けが必要です

何か提案してもらえますか?

答え1

以下はawkスクリプトです。

awk -F, 'FNR==NR {
            row[tolower($0)]
            next
        }
        {
            split($4,arr," ")
            for (r in row) {
                if (r ~ tolower($1 FS) && r ~ tolower(arr[1])) {
                    print
                    next
                }
            }
        }' second.txt first.txt

出力:

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15

second.txt行を「行」連想配列にキーとして保存し、行を解析し、選択したfirst.txtフィールドを「行」としてテストします。tolower()大文字と小文字の一致を無視するために使用されます。

メモ:最初の一致パターンがIPだけでなくなるように上記の内容を修正しました。つまり$1 FS、IPの後にカンマがあることを意味します。両方のファイルに対応するためです。それがなければ、10.0.0.1for10.0.0.13または同様のものも一致します。

関連情報