最初のファイルのサンプルデータ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.txt
1列目の最初の単語と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`
私が知っていることは次のとおりですが、きれいに整理することはできません。
first.txtの最初と4番目の列から最初の単語を取得します。
cat first.txt | cut -d, -f1
---> 最初の列を提供します。cat first.txt | cut -d, -f4 | awk 'NR==1{print $1}'
---> 4列目の最初の単語を取得します。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.1
for10.0.0.13
または同様のものも一致します。