免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何去除这个空行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-06 21:57 |只看该作者 |倒序浏览
#cat a.txt
100 Jason Smith   
200 John Doe  
#cat b.txt
100 $5,000
  
200 $500

  b.txt中有空行,如何把这两个文件连接起来输出如下
100 Jason Smith   $5,000
200 John Doe  $500

论坛徽章:
0
2 [报告]
发表于 2012-10-06 22:26 |只看该作者
awk 'NR==FNR{a[$1]=$0;next}{if($1 in a)print a[$1],$2}' a.txt b.txt

论坛徽章:
0
3 [报告]
发表于 2012-10-07 11:00 |只看该作者
回复 2# kk5234

谢谢2楼的倾情回复,2楼对awk的理解令人佩服,在下再追问几个问题
1、
以下这个命令:
awk ' NR==FNR{a[$1]=$0;next}{print a[$1]}' a.txt   
或者
awk ' NR==FNR{a[$1]=$0;next}{print a[$1]}' b.txt  为何输出都是空
2楼的"NR==FNR{a[$1]=$0;next}"这条命令 我的理解是“当NR==FNR时(即在文件a.txt中),把文件a.txt的记录放到a数组中”,此时,我后面直接接一个a.txt为何输出为空?


2、
以下这个命令:
awk ' NR==FNR{a[$1]=$0;next}{print a[$1]}' a.txt b.txt
输出如下:
100 Jason Smith
  
200 John Doe  
   
请高手们答疑解惑一下,究竟这条命令该如何理解,能否一步一步拆下来说清楚

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2012-10-07 11:35 |只看该作者
本帖最后由 yestreenstars 于 2012-10-07 11:38 编辑

1.你忽略了next的作用,awk ' NR==FNR{a[$1]=$0;next}{print a[$1]}'由于你后面只接了一个文件,所以这里的NR==FNR没有意义,{a[$1]=$0;next}的作用是把每一行数据读到数组a中,然后停止对当前行的处理,读入下一行数据,所以后面的{print a[$1]}会被忽略掉,所以什么都没输出。按照你的意义,你应该把next去掉,也就是awk ' NR==FNR{a[$1]=$0}{print a[$1]}'。

2.NR==FNR{a[$1]=$0;next}只对第一个文件有效,作用你也懂了,{print a[$1]}对第二个文件有用,第二个文件的每一行的$1分别是100、空、200,所以最后输出的就是:
100 Jason Smith
  
200 John Doe

论坛徽章:
0
5 [报告]
发表于 2012-10-07 22:42 |只看该作者
谢谢yestreenstars的回复,很详细。
我找了一下awk处理多个文件的方法,在这个地址有详细的阐述,粘贴如下
http://hi.baidu.com/beibeiboo/item/c0cb1856ba4344474eff20ab  , 希望能对以后的人有所帮助。

论坛徽章:
0
6 [报告]
发表于 2012-10-08 09:35 |只看该作者
看完上面资料,这个问题就有了另一种表达

awk  'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}b.txt a.txt

论坛徽章:
0
7 [报告]
发表于 2012-10-08 09:36 |只看该作者
少了一个' , 补上
awk  'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}'  b.txt a.txt

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2012-10-08 09:54 |只看该作者
回复 5# xxZZyyZZ


awk处理多个文件时的执行过程
http://bbs.chinaunix.net/viewthr ... ;page=2#pid12383055

论坛徽章:
0
9 [报告]
发表于 2012-10-08 23:24 |只看该作者
join 命令是不是更简单一些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP