問題は次のとおりです。サーバーに到着するすべてのマルウェアパケットのタイムスタンプとIPアドレスが登録されているさまざまなtxtファイルがあります。私がやりたいのは、マルウェアパケットが最初に到着したときに、すべてのIPについて表示する別のtxtファイルを作成することです。
一般的に私はこのようなことをしたいです:
for every line in file.txt
if (ip is not present in list.txt)
copy timestamp and ip in list.txt
私はそれを行うためにawkを使用しています。主な問題は「ipがlist.txtに存在しない場合」です。私はこれをやっています:
{ a=$( grep -w "$3" list.txt | wc -c );
if ( a == 0 )
{
#copy timestamp and ip in list.txt
}
(IPアドレスがソースファイルの3番目の列にあるため、$ 3を使用しています)
awkにgrep関数を評価させる方法がわかりません。バックティックも試してみましたが、うまくいきませんでした。誰かが私にいくつかのヒントを与えることができますか?
次のようなテストファイルでスクリプトをテストしています。
10 192.168.1.1
11 192.168.1.2
12 192.165.2.4
13 122.11.22.11
13 192.168.1.1
13 192.168.1.2
13 122.11.22.11
14 122.11.22.11
15 122.11.22.11
15 122.11.22.144
15 122.11.2.11
15 122.11.22.111
取得する必要があるものは次のとおりです。
10 192.168.1.1
11 192.168.1.2
12 192.165.2.4
13 122.11.22.11
15 122.11.22.144
15 122.11.2.11
15 122.11.22.111
あなたの助けのおかげで、私は私のニーズに合ったスクリプトを作成することに成功しました:
awk '
FILENAME == ARGV[1] {
ip[$2] = 1
next
}
! ($2 in ip) {
print $1, $2 >> ARGV[1]
ip[$2] = 1
}
' list.txt file.txt