我有一个日志文件,我使用awk来提取所需的列。我的命令是
awk '{ print $2" "$5" " $6}' log.txt
$ 5列包含servername,格式可以是@:server1 @:@:@:,server2 @:@:@:@:@:,@:@:Server3,没有固定数量的@:符号
如何修改我的语句,以便从第5列中删除所有'@:'以仅获取服务器名称?
答案 0 :(得分:3)
您可以使用gensub功能。
awk '{ print $2, gensub(/@:/, "", "g", $5), $6}' log.txt
编辑:请参阅下面的glenn jackman的评论,了解可能的可移植性问题。
答案 1 :(得分:0)
我建议这样的事情:
awk '{ sub("^(@:)*","",$5); sub("(@:)*$","",$5); print $2" "$5" "$6 }'
请注意,您也可以编写print $2,$5,$6
- ','替换为输出字段分隔符,默认情况下为空格。
(编辑后也从字符串末尾删除“@:”)