【发布时间】:2014-05-13 14:36:31
【问题描述】:
我有一个包含许多记录的日志文件。所有行和列的行具有相同的格式。我想使用 sed 来匹配某个列中的值并在列之间添加新值。例如,这样的日志:
2014.3.17 23:57:11 127.0.0.3 10.21.31.141 http://vcs2.msg.yahoo.com/capacity *DENIED* Banned site: msg.yahoo.com GET 0 0 3 403 - working_time content3 -
我的命令将在日志中搜索 msg.yahoo.com(第 9 列),如果匹配,它将在第 12 列和第 13 列之间添加值(社交媒体)。按预期输出:
2014.3.17 23:57:11 127.0.0.3 10.21.31.141 http://vcs2.msg.yahoo.com/capacity *DENIED* Banned site: msg.yahoo.com GET 0 0 Social Media 3 403 - working_time content3 -
我的 awk 代码仅将社交媒体放在第 12 列和第 13 列之间:
awk -v column=12 -v value="Social Media" '
BEGIN {
FS = OFS = " ";
}
{
for ( i = NF + 1; i > column; i-- ) {
$i = $(i-1);
}
$i = value;
print $0;
}
' access3.log
但它需要在添加价值之前在第 9 列中找到 msg.yahoo.com。就像这样,如果列 9 = msg.yahoo.com,将社交媒体放在第 12 列之后或 12 到 13 列之间。
【问题讨论】: