使用awk只获取部分行

时间:2009-10-15 14:46:43

标签: linux awk

我有一个日志文件,我使用awk来提取所需的列。我的命令是

awk '{ print $2" "$5" " $6}' log.txt

$ 5列包含servername,格式可以是@:server1 @:@:@:,server2 @:@:@:@:@:,@:@:Server3,没有固定数量的@:符号

如何修改我的语句,以便从第5列中删除所有'@:'以仅获取服务器名称?

2 个答案:

答案 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 - ','替换为输出字段分隔符,默认情况下为空格。

(编辑后也从字符串末尾删除“@:”)