Swa*_*are 0 awk text-processing
我有这样的文本文件。
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
Run Code Online (Sandbox Code Playgroud)
如果特定的 Ip 地址被标记为源和目标,那么我想将该 Ip 标记为both。在这种情况下,IP 23.234.22.106 既是源也是目标。所以,我想把它标记为both。
我想要的输出应该是这样的
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
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的。
cat input.txt | awk '{print $3}' | sort | uniq | while read line
do
grep $line input.txt | sort -r -k1 | head -1
done
Run Code Online (Sandbox Code Playgroud)
但是,我不明白如何标记特定的IP作为两个如果是源和目的地。在这种情况下,23.234.22.106。
我怎样才能使用 awk 做到这一点?对此的任何帮助将不胜感激。谢谢
试试 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
Run Code Online (Sandbox Code Playgroud)
[0-9.]\+
一组数字和点\s
空格或制表符\S\+
一组非空格符号\n
新队.*
任何符号\1
复数中组的反向参考 \(...\)
$
模式结束 (修改:删除t
命令(tnx 2 jthill)并在组前添加 \space 以检查完整地址)
归档时间: |
|
查看次数: |
2410 次 |
最近记录: |