免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xxq31217
打印 上一主题 下一主题

gawk能嵌套gawk么?? [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2012-02-25 12:31 |只看该作者
xxq31217 发表于 2012-02-25 11:19
啊,哪位给出代码啊

可是呢,awk里面使用却不是这样使用的.
如果只是要运行外部命令,
system函数即可
如果要把命令的输入再处理,你应该使用管道
getline

论坛徽章:
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
12 [报告]
发表于 2012-02-26 09:02 |只看该作者
听三楼的和八楼的吧
而且如果file1不是很大,用数组存起来,还反复读都省了

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
13 [报告]
发表于 2012-02-26 11:44 |只看该作者
  1. [winway@winway ~]$ cat f1
  2. 2 3 4
  3. 3 4 5
  4. 4 5 6
  5. [winway@winway ~]$ cat f2
  6. 4 5 6
  7. 5 6 7
  8. 6 7 8
  9. [winway@winway ~]$ awk 'NR==FNR{a[++i]=$1;next}{for(j=1;j<=i;j++){print a[j],$3 > $3};close($3)}' f1 f2
  10. [winway@winway ~]$ cat 6
  11. 2 6
  12. 3 6
  13. 4 6
  14. [winway@winway ~]$ cat 7
  15. 2 7
  16. 3 7
  17. 4 7
  18. [winway@winway ~]$ cat 8
  19. 2 8
  20. 3 8
  21. 4 8
复制代码
是这个意思吗

论坛徽章:
0
14 [报告]
发表于 2012-02-27 17:05 |只看该作者
回复 13# winway1988


    问题简单一点,如果:
f1是
12
4
6
2
10

f2是
3
5
3
40
22
   当f1比f2同一行的数据大,则把f1和f2那行输出。结果应为:
12 3
6  3
   

这个怎么实现?如果两个都是用数组的话,怎么实现?都不适用数组怎么实现?给出一种结果,也非常感谢!!

论坛徽章:
0
15 [报告]
发表于 2012-02-27 17:25 |只看该作者
f1和f2都是文件,

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
16 [报告]
发表于 2012-02-27 19:57 |只看该作者
本帖最后由 winway1988 于 2012-02-27 19:58 编辑

回复 15# xxq31217
  1. awk 'FILENAME=="f1"{f1[FNR]=$0}FILENAME=="f2"{f2[FNR]=$0}END{for(i=1;i<=FNR;i++){if(f1[i]>f2[i])print f1[i],f2[i]}}' f1 f2
  2. 12 3
  3. 6 3
复制代码
  1. awk '{if(getline f2 < "f2"){if($0 > f2) print $0,f2}}' f1 f2
  2. 12 3
  3. 6 3
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
17 [报告]
发表于 2012-02-28 08:20 |只看该作者
回复 14# xxq31217


    paste file1 file2 |awk '$1>$2'

论坛徽章:
0
18 [报告]
发表于 2012-02-28 12:23 |只看该作者
回复 16# winway1988

不好意思啊,还得打搅一下:
问题是这样的:

文件earthquake.txt(有上万行)为:
2009/04/04/12/23 46.50 151.55 6.0   
2009/05/12/09/53 40.50 151.55 5.0   
2009/07/19/04/23 20.90 151.55 4.4   
2009/08/20/23/55 40.60 151.55 7.0   
2009/10/29/18/50 22.00 151.55 6.6   
..................................................................
是:年/月/日/时/分、地震维度、地震经度、震级

文件station.txt内容(有十几行)为:
HOY    36.25    108.79
TTD    35.42    108.00
ZHQ   33.30    105.50
TUO   29.50    106.92
..................................................................
为:台站名称、台站维度、台站经度
   
     我现在想把earthquake.txt中地震与station.txt中台站距离>3000km的地震事件挑出来(知道两个点的经纬度,计算两点之间距离,我已经有这个程序了,程序叫LL)写到文件中,文件名以台站名称做后缀。
    最后结果应该是生成XXX_HOY、XXX_TTD、XXX_ZHQ、XXX_TUO等等的文件(有多少个台站,就应该有多少个文件),每个文件内都是震中距>3000km 的地震记录。
这个怎么实现?

论坛徽章:
0
19 [报告]
发表于 2012-02-28 12:55 |只看该作者
其中LL的使用是:
终端输入:LL   维度1  经度1  维度2  经度2
得到距离

论坛徽章:
0
20 [报告]
发表于 2012-02-28 12:55 |只看该作者
回复 17# yinyuemi


    不好意思啊,还得打搅一下:
问题是这样的:

文件earthquake.txt(有上万行)为:
2009/04/04/12/23 46.50 151.55 6.0   
2009/05/12/09/53 40.50 151.55 5.0   
2009/07/19/04/23 20.90 151.55 4.4   
2009/08/20/23/55 40.60 151.55 7.0   
2009/10/29/18/50 22.00 151.55 6.6   
..................................................................
是:年/月/日/时/分、地震维度、地震经度、震级

文件station.txt内容(有十几行)为:
HOY    36.25    108.79
TTD    35.42    108.00
ZHQ   33.30    105.50
TUO   29.50    106.92
..................................................................
为:台站名称、台站维度、台站经度
   
     我现在想把earthquake.txt中地震与station.txt中台站距离>3000km的地震事件挑出来(知道两个点的经纬度,计算两点之间距离,我已经有这个程序了,程序叫LL)写到文件中,文件名以台站名称做后缀。
    最后结果应该是生成XXX_HOY、XXX_TTD、XXX_ZHQ、XXX_TUO等等的文件(有多少个台站,就应该有多少个文件),每个文件内都是震中距>3000km 的地震记录。
这个怎么实现?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP