忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: KEN6503

[文本处理] 脚本的第二个while loop 可以不可以用其他代替(增加一点新要求) [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-09-07 06:20:00程序设计版块每日发帖之星
日期:2015-09-07 06:20:00
发表于 2017-03-19 16:39 |显示全部楼层
本帖最后由 zy86416779 于 2017-03-19 16:41 编辑
  1. [root@CentOS_6 shell]# awk '{if(NR==FNR){a[$1]=$3}else{if($1 in a)printf $4 "=" a[$1] "\n" > $3}}' a.txt b.txt
  2. [root@CentOS_6 shell]# ls
  3. a.txt  b.txt  c.txt  file1.txt  file2.txt
  4. [root@CentOS_6 shell]# cat file1.txt
  5. content1=20170203
  6. [root@CentOS_6 shell]# cat file2.txt
  7. content2=20170204
  8. [root@CentOS_6 shell]# cat a.txt
  9. AAA     FIRST   20170203
  10. BBB     SECOND  20170204
  11. [root@CentOS_6 shell]# cat b.txt
  12. AAA     FIRST   file1.txt       content1
  13. BBB     SECOND  file2.txt       content2
  14. CCC     SECOND  file2.txt       content2
复制代码

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
发表于 2017-03-19 18:59 |显示全部楼层
回复 7# moperyblue

论坛徽章:
0
发表于 2017-03-21 22:04 |显示全部楼层
那位帮忙看看新增加的要求如何实现

论坛徽章:
112
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-03-22 08:20 |显示全部楼层
回复 1# KEN6503

$ cat gen_file.sh
awk '{
  key=$1","$2
}
# for first file (F2)
FNR==NR{
  file[key]=$3;
  cont[key]=$4;
  next
}

# other file (F1)
NF{
  if(file[key]){
    print cont[key]"="$3 > file[key]
    print cont[key]"="$3" ==> " file[key]
  }
  # didnot match the key
  else{
    print $0 > "errorlog"
    print $0 " ==> errorlog"
  }
}
' F2 F1

$ bash gen_file.sh
content1=20170203 ==> file1.txt
content2=20170204 ==> file2.txt
AAA    SECOND    20170204 ==> errorlog

论坛徽章:
0
发表于 2017-03-22 23:42 |显示全部楼层
回复 14# jason680
谢谢,你的code这是我需要的。现在又有一个文题。

我想用variable 代替hardcode。 如果,我只用文件名, code没有问题。如果我用:dir/filename。 code就抱错:
我试的用:“/”,但是,还抱错。
麻烦你看一下吧。我的OS是solaris。

  1. SunOS xxxxx 5.10 Generic_150400-04 sun4v sparc SUNW,SPARC-Enterprise-T5220
复制代码


  1. <p><p>nawk: division by zero
  2. input record number 3, file F1
  3. source line number 19</p>
复制代码
  1. nawk: syntax error at source line 19
  2. context is
  3.              print $0 > >>>  edir"/" <<<
  4. nawk: illegal statement at source line 19
复制代码





  1. <p>#!/bin/ksh
  2. errorlog=miss_content
  3. errdir=/apps/user
  4. nawk <font color="red">-v errfile=${errorlog} -v edir=${errdir}</font> '{
  5.    key=$1","$2
  6. }
  7. # for first file (F2)
  8. FNR==NR{
  9.    file[key]=$3;
  10.    cont[key]=$4;
  11.    next
  12. }</p><p> # other file (F1)
  13. NF{
  14.    if(file[key]){
  15.      print cont[key]"="$3 > file[key]
  16.      print cont[key]"="$3" ==> " file[key]
  17.    }
  18.    # didnot match the key
  19.    else{
  20.      print $0 > <font color="red"><strong>edir/errfile</strong></font>
  21.      print $0 " ==> " errfile
  22.    }
  23. }
  24. ' F2 F1</p>
复制代码


论坛徽章:
112
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-03-23 08:29 |显示全部楼层
回复 15# KEN6503

$ echo 3 5 | awk '{print $1/$2;print $1"/"$2}'
0.6
3/5

论坛徽章:
0
发表于 2017-03-24 22:44 |显示全部楼层
回复 16# jason680

谢谢回复。我试过“/”,报下面的错:

我的server是solarios SpARC

SunOS xxxx 5.10 Generic_150400-04 sun4v sparc SUNW,SPARC-Enterprise-T5220

  1. nawk: syntax error at source line 19
  2. context is
  3.              print $0 > >>>  edir"/" <<<
  4. nawk: illegal statement at source line 19
复制代码



论坛徽章:
0
发表于 2017-03-25 01:31 |显示全部楼层
回复 16# jason680

试了下面的code,第一个报错,第二个没问题。不知道为什么。


edir"/"errfile   报错
$1"/"$2          正常运行。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票6.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP