【发布时间】:2014-01-18 16:01:55
【问题描述】:
我在使用 awk 和 sed 解析日志文件时遇到问题。
以下文件:
DDDD;callID:4565;AAAA;Body:test message 1;BBBB;ng?10.1.5.60 4565;complete
DDDD;callID:5489;AAAA;Body:test message 2;BBBB;ng?10.4.100.3 5489;complete
DDDD;callID:3456;AAAA;Body:test message 3;BBBB;ng?10.200.1.5 3456;failed
使用以下命令可以很好地从第 7 列中删除 IP。我依赖于从末尾删除最后 5 个字符以仅输出 IP。
`awk -F";" ' {print $2 ";" $4 ";" $7 ";" $6}' test.CSV | sed -e 's/Body://g; s/callID://g; s/ng?//g' | sed 's/.\{5\}$//' >> complete.txt`
加速输出:
4565;test message 1;complete;10.1.5.60
5489;test message 2;complete;10.4.100.3
3456;test message 3;failed;10.200.1.5
10 次中有 9 次这很好,但刚刚发现第 7 列的末尾并不总是包含 4 位数字。第 7 列包含用户输入数据,因此如果输入错误大于 4 位的内容,它不会根据需要剥离 IP。如何删除除该列的 IP 之外的所有内容?
错误字段示例:
DDDD;callID:3456;AAAA;Body:test message 3;BBBB;ng?10.200.1.5 3456345;failed
错误的输出:
3456;test message 3;failed;10.200.1.5 34
我正在尝试使用
grep -Eo '\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b'
在 {print.....} 部分内,但无法使其工作.....
提前感谢您的帮助。
【问题讨论】:
-
如果您已经在使用 awk,则永远不需要 sed,因为 sed 没有什么可以做 awk 做不到的。