このようなテキストファイルがあります。
2015-11-24 12:59:37.112 128.206.6.136 source
2014-11-24 12:59:36.920 8.8.8.8 source
2014-11-24 14:59:38.112 23.234.22.106 destination
2014-11-24 13:59:37.113 23.234.22.106 source
2014-11-24 12:59:29.047 74.125.198.141 source
2014-12-25 12:59:36.920 74.125.198.148 destination
特定のIPアドレスが送信元と宛先として表示されている場合は、そのIPを次に表示したいと思います。両方。この例では、IP 23.234.22.106 は送信元と宛先です。だから私はそれを次のように表示したいと思います。両方。
私が望む出力は次のようになります
2015-11-24 12:59:37.112 128.206.6.136 source
2014-11-24 12:59:36.920 8.8.8.8 source
2014-11-24 14:59:38.112 23.234.22.106 both
2014-11-24 12:59:29.047 74.125.198.141 source
2014-12-25 12:59:36.920 74.125.198.148 destination
私が試したことは次のとおりです。
cat input.txt | awk '{print $3}' | sort | uniq | while read line
do
grep $line input.txt | sort -r -k1 | head -1
done
ただし、特定のIPを次のように表示する方法を理解していません。両方ソースなら目的地でもあります。この場合は23.234.22.106です。
awkを使ってこれを行うにはどうすればよいですか?これにご協力いただきありがとうございます。ありがとう
ベストアンサー1
試してみてくださいsed
sed '
N #add next line
s/\([0-9.]\+\)\s\S\+\n.*\s\1\s\S\+$/\1 both/
P #print first line from two
D #remove first line, return to start
' input.txt
[0-9.]\+
数字と点のセット\s
スペースまたはタブ\S\+
空白以外の文字セット\n
新しいチーム.*
すべてのシンボル\1
角かっこで囲まれたグループの逆参照\(...\)
$
パターンの終わり
(修正:削除t
コマンド(tnx 2ゼチル)グローバルアドレスを確認するには、グループの前に\ spaceを追加してください)