免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2740 | 回复: 13
打印 上一主题 下一主题

[文本处理] awk为什么没把系统变量带入 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-05 17:03 |只看该作者 |倒序浏览
为什么awk -v s=$line '{print $2 " "s}'的时候S的值找不到?
  1.         while read line
  2.         do
  3.                 cat server.log|grep -A2 "$line"|grep -v "$line.*"|sed '/--/d'|sed 'N;s/\n//g'|awk -v s=$line '{print $2 " "s}'
  4.         done <./error.log
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2013-01-05 17:09 |只看该作者
set -xv自己观察一下

论坛徽章:
0
3 [报告]
发表于 2013-01-05 17:19 |只看该作者
  1. + read line
  2. + cat server.log
  3. + grep -A2 '200 OK'
  4. + grep -v '200 OK.*'
  5. + sed /--/d
  6. + sed 'N;s/\n//g'
  7. + a='200 OK'
  8. + awk -v s= '{print $5" "$4" "$3" "$6" "s}'
复制代码
s=空,但是上面语句使用$line是可以带入的。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2013-01-05 17:34 |只看该作者
能否把error.log内容贴出来,我也想试试。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
5 [报告]
发表于 2013-01-05 22:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2013-01-05 23:17 |只看该作者
回复 3# 搁浅的思恋


    这和一楼的代码不一样吧?

论坛徽章:
0
7 [报告]
发表于 2013-01-06 09:10 |只看该作者
error.log的内容,其实我只是想在日志中找到这些关键字的内容进行处理而已。
  1. 200 OK
  2. 201 Created
  3. 250 Low on Storage Space
  4. 300 Multiple Choices
  5. 301 Moved Permanently
  6. 302 Moved Temporarily
  7. 303 See Other
  8. 304 Not Modified
  9. 305 Use Proxy
  10. 400 Bad Request
  11. 401 Unauthorized
  12. 402 Payment Required
  13. 403 Forbidden
  14. 404 Not Found
  15. 405 Method Not Allowed
  16. 406 Not Acceptable
  17. 407 Proxy Authentication Required
  18. 408 Request Time-out
  19. 410 Gone
  20. 411 Length Required
  21. 412 Precondition Failed
  22. 413 Request Entity Too Large
  23. 414 Request-URI Too Large
  24. 415 Unsupported Media Type
  25. 451 Parameter Not Understood
  26. 452 Conference Not Found
  27. 453 Not Enough Bandwidth
  28. 454 Session Not Found
  29. 455 Method Not Valid in This State
  30. 456 Header Field Not Valid for Resource
  31. 457 Invalid Range
  32. 458 Parameter Is Read-Only
  33. 459 Aggregate operation not allowed
  34. 460 Only aggregate operation allowed
  35. 461 Unsupported transport
  36. 462 Destination unreachable
  37. 500 Internal Server Error
  38. 501 Not Implemented
  39. 502 Bad Gateway
  40. 503 Service Unavailable
  41. 504 Gateway Time-out
  42. 505 RTSP Version not supported
  43. 551 Option not supported
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2013-01-06 09:21 |只看该作者
搁浅的思恋 发表于 2013-01-05 17:19
s=空,但是上面语句使用$line是可以带入的。


+ a='200 OK'

这个哪儿来的?

论坛徽章:
0
9 [报告]
发表于 2013-01-06 09:36 |只看该作者
在最后的AWK前面又加了个变量获取line的值。
  1. while read line
  2. do
  3.    cat /root/test/rtsp_integration/streamserver/sessionserver.log|grep -A2 "$line"|grep -v "$line.*"|sed '/--/d'|sed 'N;s/\n//g'|a=$line awk -v s=$a '{print $5" "$4" "$3" "$6" "s}'
  4. done<error.log
复制代码

论坛徽章:
0
10 [报告]
发表于 2013-01-06 09:49 |只看该作者
我日志中获取的信息是这样的。
  1. RTSP/1.0 200 OK
  2. CSeq: 107583
  3. Date: 05 Jan 2013 16:33:36 CST
  4. --
  5. RTSP/1.0 200 OK
  6. CSeq: 913534
  7. Date: 05 Jan 2013 16:33:38 CST
  8. --
复制代码
我只想获取每组中的状态码(200 OK)和时间,因为基础较差所以我就先查询出关键字的下几行
cat server.log|grep -A2 "$line"|grep -v "$line.*"
然后去掉了特殊符号“--”
sed '/--/d'
然后把两行合并下,最后用awk打印下信息;因为状态码的哪行给我去掉了,所以我想引用变量带入awk中。

我总体思路是这样的,但是不知道什么环节出了错误,请各位大神知道一下,谢谢;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP