【问题标题】:Get only a part of the line using awk使用 awk 只获取行的一部分
【发布时间】:2009-10-15 14:46:42
【问题描述】:

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

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

$5 列包含服务器名称,格式可以是@:server1@:@:@:、server2@:@:@:@:@:、@:@:Server3,没有固定数量的@: 符号.

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

【问题讨论】:

  • 您在一个地方说“$5 列”而在另一个地方说“第 3 列” - 我们是否误解了您需要在哪里执行替换?

标签: linux awk


【解决方案1】:

您可以使用 gensub 函数。

awk '{ print $2, gensub(/@:/, "", "g", $5), $6}' log.txt

编辑:请参阅下面 glenn jackman 的评论,了解可能的可移植性影响。

【讨论】:

  • gensub() 仅在 gawk 中吗? gsub(/@:/, "", $5) 是“便携的”
【解决方案2】:

我会建议这样的事情:

awk '{ sub("^(@:)*","",$5); sub("(@:)*$","",$5); print $2" "$5" "$6 }'

请注意,您也可以写print $2,$5,$6 - ',' 被替换为输出字段分隔符,默认情况下为空格。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多