请使用awk命令将如下两份文件中名字相同的两行合并起来

[root@localhost ~]# cat 1.txt

韩海林 21岁

海林韩 23岁

韩林海 22岁

林海韩 24岁

[root@localhost ~]# cat 2.txt

韩林海 男

海林韩 男

韩海林 男

林海韩 男

输出效果:

韩海林 21岁 男

[root@localhost ~]# awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt  1.txt

韩海林 21岁 男

海林韩 23岁 男

韩林海 22岁 男

林海韩 24岁 男

[root@localhost~]# awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt  1.txt > 3.txt

[root@localhost ~]# cat 3.txt

韩海林 21岁 男

海林韩 23岁 男

韩林海 22岁 男

林海韩 24岁 男

解释:

在awk里,NR和FNR的含义相近,唯一的区别就是作用范围,NR是所有读取的行信息计数,而FNR是正在读取文件的行信息计数,FNR在文件切换时会从0重新开始计数,所以上述语句的意思是:

NR==FNR  NR最大值为4,FNR值为1-4,以2.txt的第一个数据项为key,$2即第2列为数据组成数组;

NR>FNR  此时NR=(2.txt的总行数+FNR),NR最大值为8,FNR则重新从1-4计数,判断第一个数据项在不在2.txt数据组成的数组里,如果在,则打印本行加数组项。

NR是英文number of record的简写,就是awk每从文件或输入流中读入一行数据,就把这个变量加一。这个是awk自带的变量。

其他的解释:

NR==FNR{a[$1]=$2}

打开第一个文件2.txt,把文件里面的$2列的内容存入到a[$1]这个数组。

NR>FNR{print $0,a[$1]}

然后打开第二个文件,打印1.txt一行内容,然后打印第一个文件a[$1]数组的内容。

加入if判断,更容易理解,上面的命令省略了;判断1.txt的第一列内容在a数组里面,打印整行内容和a[$1]数组内容;

[root@localhost ~]# awk 'NR==FNR{a[$1]=$2;next}NR>FNR{if($1 in a)print $0,a[$1]}' 2.txt 1.txt

韩海林 21岁 男

海林韩 23岁 男

韩林海 22岁 男

林海韩 24岁 男

文件顺序不同,结果也不同;

[root@localhost ~]# awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 1.txt 2.txt

韩林海 男 22岁

海林韩 男 23岁

韩海林 男 21岁

林海韩 男 24岁

linux awk合并文件内容,awk实际应用:文本合并相关推荐

  1. linux shell 编辑文件内容,Shell编辑与文本处理(Bash sed文本编辑)

    释放双眼,带上耳机,听听看~! 1 sed 命令格式 sed 的全称是 stream editor,也就是流编辑器.其作用便是将文本文件或来自于管道符传入的输入流做文本的处理,如替换.增加内容.删除内 ...

  2. linux命令看文件内容,Linux文件内容查看相关命令

    1.more命令 在Linux中,more命令是一个基于vi编辑器的文本过滤器,它能以全屏的方式按页显示文本文件的内容,more里面内置了一些快捷键. (1)命令语法 more(选项)(参数) (2) ...

  3. Linux下查看文件内容

    Linux下查看文件内容的命令 1.cat 与 tac.nl cat的功能是将文件从第一行开始连续的将内容输出在屏幕上.但是当文件过大行数比较多时,屏幕无法全部容下时,只能看到一部分内容. cat [ ...

  4. linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  5. java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

    [Java教程][Linux]linux查看日志文件内容命令tail.cat.tac.head.echo 0 2017-11-14 12:00:29 linux查看日志文件内容命令tail.cat.t ...

  6. linux view查看日志命令,【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  7. 【Linux】查看文件内容的相关命令总结

    在Linux下面查看文件内容,不像windows那么方便,双击鼠标就可以搞定.在linux下面,所有一切都是文件,需要用命令来打开. 有许多命令都可以查看文件,不同的命令有不同的优点,可以针对不同的需 ...

  8. linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  9. Linux常用查看文件内容命令

    Linux下查看文件内容的命令 cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的显示文件内容 less 和more类 ...

最新文章

  1. RabbitMQ基本概念(一)-RabbitMQ的优劣势及产生背景
  2. poe交换机的作用和优点
  3. Android中如何下载文件并显示下载进度
  4. OpenResty(nginx)操作mysql的初步应用
  5. 错误: 非法字符: ‘\ufeff‘ 解决方案
  6. 50行python代码自动生成文章_如何通过50行Python代码获取公众号全部文章
  7. day39-Spring 14-Spring的JDBC模板:DBCP连接池配置
  8. VMWare 装mac os x 一个必备优化神器 beamoff
  9. 统计学中抽样调查和一些常用的方法
  10. 2019最新天善智能python3数据分析与挖掘项目实战(完整)
  11. qt无边框窗体的移动
  12. css3中-moz、-ms、-webkit意思
  13. 协会分享 | 如何推动EOS区块链技术在高校的落地
  14. cerebro 通过https访问ES docker集群
  15. Linux下Watchdog
  16. 电脑重启后IDEA导包报错
  17. 《CSDN博客搬家》
  18. 【Simulink教程案例5】基于Simulink的MPC控制器设计与实现
  19. react引入百度地图详解(配置智能检索反向地址解析获取实际地标)
  20. 计算机义诊暑期社会实践报告,暑期社会实践 | 免费技术进社区,电脑义诊帮您忙...

热门文章

  1. R语言与数据的预处理
  2. 你是不是也像我一样羡慕那些创业成功有自己事业的人,也想跃跃欲试却没有勇气尝试,担心失败
  3. 贵州西部农产品:正安情寄予白茶
  4. 使用element-ui的el-tree组件
  5. [Python] 爬取 材料力学Ⅰ第六版刘鸿文-指导与例题习题解答
  6. Grid网格布局详细讲解
  7. 鼎捷T100参数配置与管理篇
  8. 计算机教案精美图片我收集,人教版三年级信息技术《第十四课 美化图片我来做》教案(精品获奖)...
  9. rabbimq operation queue.declare caused a channel exception not_found
  10. 使用百度云AI实现刷脸登录