免费注册 查看新帖 |

Chinaunix

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

[文本处理] 怎样判断A列中的值A1是否在B列值中? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-02 16:05 |只看该作者 |倒序浏览
脚本用途:比较选出来的两列值 其中一列的每个值是否在另外一列里,如果不在的话把这个值输出


我写的脚本:
dsmadmc -id=admin -password=admin << EOF
      2         set sqldisplay wide
      3    q noded testnode > nodev.txt
      4 EOF
      5
      6 #awk 'NR>6 {printf "%s\n",$2}' nodev.txt >nodev.txt.new
      7
      8 nodev=`awk 'NR>6 {printf "%s\n",$2}' nodev.txt`
      9
     10 dsmadmc -id=admin -password=admin << EOF
     11         set sqldisplay wide
     12         q libv > libv.txt
     13 EOF
     14
     15 #awk 'NR>4 {printf "%s\n",$2}' libv.txt >libv.txt.new
     16
     17 libv=`awk 'NR>4 {printf "%s\n",$2}' libv.txt`
     18
     19 for i in ${nodev}
     20   do
     21     for h in ${libv}
     22       do
     23        if ${i} -ne ${h}
     24           then printf "no vol ${i}"
     25        fi
     26      done
     27    done



运行时报错信息:
node.sh: line 23: CO0001: command not found
node.sh: line 23: CO0001: command not found
node.sh: line 23: CO0001: command not found
node.sh: line 23: CO0001: command not found
node.sh: line 23: CO0001: command not found


哪儿错了?怎样修改?

论坛徽章:
0
2 [报告]
发表于 2012-08-02 16:11 |只看该作者
回复 1# wgyin


    node.sh: line 23: CO0001: command not found
怎么改,如果是bash,if [ x -ne y ]

论坛徽章:
0
3 [报告]
发表于 2012-08-02 16:13 |只看该作者
最好把用到的数据文件内容也贴一部分出来,不然大家对你的变量内容都只能靠猜

论坛徽章:
0
4 [报告]
发表于 2012-08-02 16:51 |只看该作者
改成   if [i -ne h] 报错:
node.sh: line 23: [: i: integer expression expected
node.sh: line 23: [: i: integer expression expected
node.sh: line 23: [: i: integer expression expected
node.sh: line 23: [: i: integer expression expected
node.sh: line 23: [: i: integer expression expected

论坛徽章:
0
5 [报告]
发表于 2012-08-02 16:52 |只看该作者
[root@localhost ~]# more nodev.txt

Node Name            Volume Name                        Storage Pool         Physical
                                                        Name                  Space  
                                                                             Occupied
                                                                               (MB)  
----------------     ------------------------------     ----------------     --------
TESTNODE             CO0001                             TESTBACKUP-STGP-      153.76
                                                         OOL                        
[root@localhost ~]# more libv.txt

Library Name     Volume Name     Status               Owner          Last Use      Home        Device
                                                                                   Element     Type  
------------     -----------     ----------------     ----------     ---------     -------     ------
SCALAR-I500      CO0001          Private                             Data          1           LTO   
SCALAR-I500      CO0002          Private                                           2           LTO   
SCALAR-I500      CO0003          Private                             Export        3           LTO   
SCALAR-I500      CO0004          Scratch                                           4           LTO   
SCALAR-I500      CO0005          Scratch                                           5           LTO   
[root@localhost ~]#

论坛徽章:
0
6 [报告]
发表于 2012-08-02 16:59 |只看该作者
回复 4# wgyin


    if [ $i -ne $h ]

论坛徽章:
0
7 [报告]
发表于 2012-08-02 17:04 |只看该作者
    if [ $i -ne $h ]

报错:
    node.sh: line 23: [: CO0001: integer expression expected
node.sh: line 23: [: CO0001: integer expression expected
node.sh: line 23: [: CO0001: integer expression expected
node.sh: line 23: [: CO0001: integer expression expected
node.sh: line 23: [: CO0001: integer expression expected

论坛徽章:
1
天蝎座
日期:2013-08-22 15:14:44
8 [报告]
发表于 2012-08-03 00:06 |只看该作者
如果是字符串用!=
if [ $i != $h ]

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
9 [报告]
发表于 2012-08-03 08:55 |只看该作者
同意8楼的意见~

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
10 [报告]
发表于 2012-08-03 09:25 |只看该作者
感觉这个可以直接在SQL 语句里直接完成的任务。不过既然用到awk, 就一次完成吧, awk 是可以同时处理两个,及两个以上的文件的。也就是没必要产生那么多临时数组,变量之类的了。
  1. dsmadmc -id=admin -password=admin << EOF
  2. set sqldisplay wide
  3. q noded testnode > nodev.txt
  4. EOF

  5. dsmadmc -id=admin -password=admin << EOF
  6. set sqldisplay wide
  7. q libv > libv.txt
  8. EOF

  9. awk 'NR==FNR{if (FNR>4) a[$2]} NR>FNR{if ((FNR>6) && !($2 in a)&&($2~/^C/) ) print "no vol ",$2}' libv.txt nodev.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP