免费注册 查看新帖 |

Chinaunix

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

awk 如果第一列满足条件那么显示第二列 [复制链接]

论坛徽章:
2
2015年亚洲杯之巴林
日期:2015-02-03 21:13:57数据库技术版块每日发帖之星
日期:2015-08-26 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-20 18:27 |只看该作者 |倒序浏览
被查找的文件是/etc/shadow
文件的内容大概是这个样子

root1$DImyTWwd$m9ZIMuGCKL9KB6s2AMbFH.:14767:0:99999:7:::
bin:*:14767:0:99999:7:::
daemon:*:14767:0:99999:7:::
adm:*:14767:0:99999:7:::
lp:*:14767:0:99999:7:::
sync:*:14767:0:99999:7:::
shutdown:*:14767:0:99999:7:::


需求是:如果第一列满足条件,那么现实第二列。
设置 I=1
接下来运行下面的命令
awk -F":" '(NR=='${I}'){if($1=="root" print $2}' /etc/shadow
结果正确
显示$1$DImyTWwd$m9ZIMuGCKL9KB6s2AMbFH.

可是现在我设置USERID=root
再运行
awk -F":" '(NR=='${I}'){if($1=="${USERID}" print $2}' /etc/shadow
结果什么都没有,就是没找到。把双引号换成单引号,或者把双引号去掉都不行。

同样是变量I用单引号就可以,为什么USERID就不行。
高手说一下,多谢。

论坛徽章:
0
2 [报告]
发表于 2010-06-20 18:50 |只看该作者
单引号行吗?我没试啊。看电视呢~懒得开了
不过这样的问题无非就是引号的问题

论坛徽章:
0
3 [报告]
发表于 2010-06-20 18:51 |只看该作者
  1. suntao@suntao-linux:~$ cat c
  2. root:$1$DImyTWwd$m9ZIMuGCKL9KB6s2AMbFH.:14767:0:99999:7:::
  3. bin:*:14767:0:99999:7:::
  4. daemon:*:14767:0:99999:7:::
  5. adm:*:14767:0:99999:7:::
  6. lp:*:14767:0:99999:7:::
  7. sync:*:14767:0:99999:7:::
  8. shutdown:*:14767:0:99999:7:::
  9. suntao@suntao-linux:~$ echo $USERID $l
  10. root 1
  11. suntao@suntao-linux:~$ awk -F: 'NR=='$l'{if($1=="'$USERID'") print $2}'  c
  12. $1$DImyTWwd$m9ZIMuGCKL9KB6s2AMbFH.
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-06-20 19:25 |只看该作者
回复 3# bbgg1983


  为什么不能用 awk -F: 'NR=='$l'{if($1=='$USERID') print $2}'  c?

论坛徽章:
0
5 [报告]
发表于 2010-06-20 19:48 |只看该作者
回复 4# sayigood
  1. 这个和shell命令行执行的过程有关系,我学习的过程中总结如下:
  2. 1.将命令分割成token,是以固定的一组meta字符分隔,有空格、制表符、换行符、分号、小括号、输入输出重定向符,管道符和&,token的种类包括单词、关键字、输入输出重定向符以及分号。
  3. 2.检查每个命令的第一个token,看看是否它是不带有引号或者反斜杠的关键字,如果他是一个开放的关键字(if与其他控制结构的开始负号,如{或( ),则这个命令是一个复合命令。shell为复合命令进行内部的设置,读取下一条命令,并再次启动进程。如果关键字非复合命令的开始符号(例如它是控制结构的中间部分,像then、else、do或是结尾部分,例如fi、done或者逻辑运算符),则shell会发出语法错误的信号。
  4. 3.将每一个命令的第一个单词与别名类表对照检查。如果匹配,它便代替别名的定义,并回到步骤1,否则进行步骤4。回到步骤一,允许让关键字的别名被定义,注意,shell不会执行递归的别名展开,反而当别名展开为相同的命令时它会知道,并停止潜在的递归操作,可以通过引用要被保护的单词的任何部分二进制别名展开。
  5. 4.波浪号展开
  6. 5.将任何开头为$符号的表达式执行参数替换(变量展开)
  7. 6.将任何形式为$(string)或`string`的表达式执行命令替换。
  8. 7.将$((string))执行算术替换
  9. 8.使用$IFS再次将展开后的命令切分为单词(第一次是使用meta字符)
  10. 9.执行通配符展开
  11. 10.使用第一个单词作为一个命令:查找顺序为别名-关键字-特殊内置命令-函数-一般内置命令-脚本或可执行程序。
  12. 11.在完成I/O重定向与其他同类型事项后执行命令。
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
6 [报告]
发表于 2010-06-20 20:02 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2010-06-20 20:13 |只看该作者
回复 5# bbgg1983


    没领悟你给的这段文字,和我问题的关系啊,能说的具体点吗?

论坛徽章:
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
8 [报告]
发表于 2010-06-20 20:48 |只看该作者
回复 4# sayigood


$1==root

$1=="root"
含义不一样

论坛徽章:
0
9 [报告]
发表于 2010-06-20 21:07 |只看该作者
ls正解  估计是把$1的值和"${USERID}"这个字符串比较。。。。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
10 [报告]
发表于 2010-06-21 11:32 |只看该作者
回复 5# bbgg1983


    这个和楼主的例子有什么关系,给详细解释一下吧大拿。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP