0

IP_Address:port# を出力する簡単な方法はありますか? SED コマンドに到達するとすぐにポート :# が削除されるため、

入力ファイルの例

Apr 6 14:20:41 TCP 178.255.83.1:80 in

このような優先出力

Apr 6 14:20:41 TCP 178.255.83.1:80 in United Kingdom
egrep -w 'TCP|UDP' $Denied_IPs |
sed 's/:[^:]* in/ in/; s/:[^:]* out/ out/' |
awk '{cmd="echo "$5" | code | fgrep 'Country:' | cut -c 16-43";
      cmd | getline rslt;
      close(cmd);
      print $1" "$2" "$3" "$4" "$5" "$6" "rslt}' >> "$IP2COUNTRY"
4

1 に答える 1

1

コマンドはsedポートを明示的に削除しています。コマンドが実行するのsedはそれだけなので、単純に式から削除します。

ちなみに、これはかなり最適ではない実装です。特に を削除した後はsedegrepを に折りたたむことができますawk

awk '/ (TCP|UDP) / {
       split($5, addr, /:/);
       cmd = "echo " addr[1] " | code | fgrep Country: | cut -c 16-43";
       cmd | getline rslt;
       close(cmd);
       print $1, $2, $3, $4, $5, $6, rslt
     }' < "$Denied_IPs" >> "$IP2COUNTRY"

codeそして、 withinの呼び出しをawk少し最適化できると思わずにはいられません。

'Country:'(また、何の役にも立たない を囲む一重引用符も削除しました。これら必要な場合は、全体がすでに一重引用符で囲まれているため、実際にはスクリプトが壊れていたはずです。)

于 2012-04-06T18:55:49.793 に答える