首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大于变量的awk字符串

大于变量的awk字符串
EN

Stack Overflow用户
提问于 2018-11-01 14:24:01
回答 2查看 1.1K关注 0票数 0

作为Linux和awk的新手,这个问题让我陷入了困境。肯定很容易让它起作用。所以我有个很好的命令。只打印比分钟时间戳新的行作为文本。

代码语言:javascript
复制
awk -F\" '$0> "[01/Nov/2018:15:58" {print $0}' localhost_access_log.2018-11-01.txt

日志文件的格式如下

代码语言:javascript
复制
[01/Nov/2018:15:53:16 +0200] x.x.x.10 "-" "-" "libwww-perl/6.13" "GET /manager/status?XML=true HTTP/1.1" 401 2473 1
[01/Nov/2018:15:53:16 +0200] x.x.x.10 "-" "-" "libwww-perl/6.13" "GET /manager/status?XML=true HTTP/1.1" 200 3070 4
[01/Nov/2018:15:58:16 +0200] x.x.x.10 "-" "-" "libwww-perl/6.13" "GET /manager/status?XML=true HTTP/1.1" 401 2473 2
[01/Nov/2018:15:58:16 +0200] x.x.x.10 "-" "-" "libwww-perl/6.13" "GET /manager/status?XML=true HTTP/1.1" 200 3070 4

但是,从bash脚本中运行相同的命令将不能正常工作。下面将打印日志文件中的所有行。

代码语言:javascript
复制
#!/usr/bin/bash

STAMP=$(date --date '-15 min' "+%d/%b/%Y:%H:")
MIN1=$(date --date '-15 min' "+%M")
MIN1=${MIN1:0:2}
STAMP=$STAMP$MIN1
LOGSTAMP=$(date +%Y-%m-%d)

awk -F\" '$0> "$STAMP" {print $0}' localhost_access_log.$LOGSTAMP.txt

而改变" $STAMP“-> $STAMP不会打印任何东西。

代码语言:javascript
复制
awk -F\" '$0> $STAMP {print $0}' localhost_access_log.$LOGSTAMP.txt

你能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-01 15:10:53

Bash变量在awk中不起作用。您必须使用-v标志将它们传递到awk脚本中到awk变量:

代码语言:javascript
复制
#!/usr/bin/bash

STAMP=$(date --date '-15 min' "+%d/%b/%Y:%H:")
MIN1=$(date --date '-15 min' "+%M")
MIN1=${MIN1:0:2}
STAMP=$STAMP$MIN1
LOGSTAMP=$(date +%Y-%m-%d)

awk -F\" -v stamp="$STAMP" '$0>stamp {print $0}' localhost_access_log.$LOGSTAMP.txt
票数 2
EN

Stack Overflow用户

发布于 2018-11-01 15:23:46

要将shell变量放入Awk程序字符串,您需要在引用(引用)变量后终止单引号字符串并重新启动它。它变得复杂起来:

代码语言:javascript
复制
awk -F'"' '$0> "'"$STAMP"'" {print $0}' localhost_access_log.$LOGSTAMP.txt

那么,awk所看到的程序是:

代码语言:javascript
复制
$0 > "01/Nov/2018:13:15" { print $0 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53103245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档