免费注册 查看新帖 |

Chinaunix

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

awk中字符串的引用,超急!两天没想明白 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-23 10:07 |只看该作者 |倒序浏览
问题描述:
需要在文件"/proc/device"中找出第二列为“DEMO”的行的第一列的内容,我使用下面的命令
-------------------------------------------------------------------------
awk '$2 =="DEMO" {print $1}' /proc/devices
-------------------------------------------------------------------------
是可以的。但是当我想把这个“DEMO”当做变亮串进去,例如如下的写法:
-------------------------------------------------------------------------
STR=DEMO
awk '$2 == $STR {print $1}' /proc/devices
-------------------------------------------------------------------------
就是错误的。

原因我分析是因为$STR被shel解释为了DEMO,而awk又将DEMO当做变量解释了,所以错误。
请问该怎么修改??急!!!

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2008-09-23 10:14 |只看该作者
awk '$2 == "'$STR'" {print $1}' /proc/devices

论坛徽章:
0
3 [报告]
发表于 2008-09-23 10:25 |只看该作者
awk -v STR=DEMO '$2 == STR {print $1}' /proc/devices
or ly5066113老大的

论坛徽章:
0
4 [报告]
发表于 2008-09-23 10:30 |只看该作者

回复 #2 ly5066113 的帖子

太感谢了,正在试试。。。。。。。。。。
一会儿回来再谢

论坛徽章:
0
5 [报告]
发表于 2008-09-23 10:41 |只看该作者

回复 #4 hemoparrot 的帖子

谢谢ly5066113 老大了,放到shell命令行下可以了,但是当我放到这个makefile中就不行,再帮忙,谢~~~
能帮我看看这个makefile么?每次make install执行的时候都提示那个awk命令返回了空结果
-------------------------------------------------------------------------------------------------------------------------------
DRI_NAME :=demo
MOD_NAME :=DEMO
NOD_NAME :=/dev/demo

obj-m :=$(DRI_NAME).o
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD ?=$(shell pwd)

default:
        $(MAKE) -C ${KERNELDIR} M=${PWD} modules
#安装的代码
install:default
        insmod demo.ko
        mknod $(NOD_NAME) c $(shell awk '$$2=="'$MOD_NAME'" {print $$1}' /proc/devices) 0

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2008-09-23 10:47 |只看该作者
原帖由 hemoparrot 于 2008-9-23 10:41 发表
谢谢ly5066113 老大了,放到shell命令行下可以了,但是当我放到这个makefile中就不行,再帮忙,谢~~~
能帮我看看这个makefile么?每次make install执行的时候都提示那个awk命令返回了空结果
---------------- ...


makefile 的语法不是很清楚。

论坛徽章:
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
7 [报告]
发表于 2008-09-23 11:09 |只看该作者

回复 #5 hemoparrot 的帖子

try:
  1.         mknod $(NOD_NAME) c $(shell awk '$$2=="'$(MOD_NAME)'" {print $$1}' /proc/devices) 0
复制代码

论坛徽章:
0
8 [报告]
发表于 2008-09-23 11:53 |只看该作者

回复 #7 blackold 的帖子

谢谢,试过了,
mknod $(NOD_NAME) c $(shell awk '$$2=="'$(MOD_NAME)'" {print $$1}' /proc/devices) 0
还是不行,最后只有改成这样才可以,
mknod $(NOD_NAME) c `awk '$$2=="'${MOD_NAME}'" {print $$1}' /proc/devices` 0
不明白$(shell command)和`command`到底有什么区别。谁知道请告知我。

论坛徽章:
0
9 [报告]
发表于 2008-09-23 11:54 |只看该作者

感谢大家的帮助,将我最后的成果共享

##文件说明,编译2.6.x的linux驱动的makefile文件
# 作者:wyj
# 创建时间:2008-09-23
##使用说明:
# 变量DRI_NAME MOD_NAME NOD_NAME 分别设置伪驱动程序的名称,生成模块的名称和设备节点的名称
# 使用make install进行安装驱动 需要root权限
# 使用make uninstall进行卸载驱动 需要root权限
# 使用make clean清除多余的文件,包括生成的模块代码

# 驱动名称
DRI_NAME :=demo
# 模块名称
MOD_NAME :=IMTI_DEMO
# 节点名称
NOD_NAME :=/dev/demo

obj-m :=$(DRI_NAME).o
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD ?=$(shell pwd)

default:
        $(MAKE) -C ${KERNELDIR} M=${PWD} modules
#安装的伪代码
.PHONY:install uninstall clean
install:default
        insmod demo.ko
        mknod $(NOD_NAME) c `awk '$$2=="'${MOD_NAME}'" {print $$1}' /proc/devices` 0
#卸载的伪代码
uninstall:
        rm -f $(NOD_NAME)
        rmmod $(DRI_NAME)
#清理垃圾的伪代码
clean:
        @rm -rf *.o *.ko .tmp_versions *~ Module.symvers .*.cmd *.mod.c

论坛徽章:
0
10 [报告]
发表于 2008-09-23 20:00 |只看该作者
awk '$1==var{print $0}' var=$STR urfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP