我们经常会将2个有关联文本文件进行合并处理。分别从不同文件获取需要的列,然后,整体输出到一起。awk进行多文件处理时候,常常会遇到2个方面问题,第一个是怎么样合并多个文件为一个文件。第二个问题就是怎么样将多行合并为一行显示。我这里说下我的处理2种方法,还有实现思路。

实例文本:

[chengmo@centos5 shell]$ awk 'FNR==1{print "\r\n"FILENAME}{print $0}' a.txt b.txt            a.txt
100     wang    man
200 wangsan woman
300 wangming man
400 wangzheng manb.txt
100 90 80
200 80 70
300 60 50
400 70 20

需要合并得到结果:

100     wang    man 90  80
200 wangsan woman 80    70
300 wangming man 60     50
400 wangzheng man 70    20

  • awk多文件操作方法一:

实现思路:

通过外部命令合并文件,然后通过排序,然后通过awk进行合并操作。

首先:

[chengmo@centos5 shell]$ cat a.txt b.txt | sort -n -k1 |awk '{print}'
100 90 80
100     wang    man
200 80 70
200 wangsan woman
300 60 50
300 wangming man
400 70 20
400 wangzheng man

现在需要把:第一列相同的处理合并到一行,这里需要用“next”语句。它操作,可以参考awk 多行合并【next 使用介绍】(常见应用4)

继续:

[chengmo@centos5 shell]$  cat a.txt b.txt | sort -n -k1 |awk  'NR%2==1{fd1=$2"\t"$3;next}{print $0"\t"fd1}'
100     wang    man     90      80
200 wangsan woman       80      70
300 wangming man        60      50
400 wangzheng man       70      20

需要把几行合并,经常用到方法是:NR%num 然后将行值保存下来,next该行。在输出时候打印出来。

  • awk多文件操作方法二

实现思路

不借助第3放工具打开,直接通过awk 打开多个文件。然后可以通过:FILENAME获得当前处理文件名。NR总记录 FNR当前文件记录,以及ARGC传入参数总数,ARGV是数组,各个参数值。

看下这些实例:

[chengmo@centos5 shell]$ awk 'BEGIN{print ARGC,ARGV[0],ARGV[1],ARGV[2]}{print FILENAME,NR,FNR,$0}' a.txt b.txt
3 awk a.txt b.txt
a.txt 1 1 100   wang    man
a.txt 2 2 200 wangsan woman
a.txt 3 3 300 wangming man
a.txt 4 4 400 wangzheng man
b.txt 5 1 100 90 80
b.txt 6 2 200 80 70
b.txt 7 3 300 60 50
b.txt 8 4 400 70 20

程序代码:

[chengmo@centos5 shell]$ awk '
BEGIN{
if(ARGC<3)
{exit 1;
} file="";
}
{
aData[FILENAME,$1]=ARGV[1]==FILENAME?$0:$2"\t"$3;
}
END{
for(k in aData)
{split(k,idx,SUBSEP); if(idx[1]==ARGV[1] && (ARGV[2],idx[2]) in aData){print aData[ARGV[1],idx[2]],aData[ARGV[2],idx[2]] | "sort -n -k1";}
}
}' a.txt b.txt100     wang    man 90  80
200 wangsan woman 80    70
300 wangming man 60     50
400 wangzheng man 70    20

代码说明:

这里用到2维数组,aData[文件名,关联列对应值] ,这种方法可以将多个文件内容。放入一个统一二维数组。然后循环数组,通过if((i,j} in array) 查找对应列值,在其它文件中是否存在。

以上是2种实现方法,其中第一种思路较为简单,很容易理解。第二种处理起来较为复杂。有更好方法大家给我分享。

转载于:https://www.cnblogs.com/chengmo/archive/2010/10/15/1851983.html

awk 多文件操作2种实现方法相关推荐

  1. 电脑快捷方式删除文件后四种找回方法

    快捷指令是一种用作替代快捷键操作的技术.也可以称为"快捷键","快捷方式"或"快捷键序列",它们允许用户在非常快速和方便的方式建立特定操作序 ...

  2. 上传文件的几种主要方法。

    上传文件的几种主要方法. 第一种:经典的form和input上传. 设置form的aciton为后端页面,enctype="multipart/form-data",type='p ...

  3. 如何添加修改hosts文件?几种修改方法让你简单方便管理

    如何修改hosts文件?几种修改方法让你简单方便快捷,hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库&q ...

  4. python第三方模块安装路径_Python第三方Window模块文件的几种安装方法

    python安装第三方模块 使用软件管理工具pip python自带了包管理工具,就像手机app商城,91助手等软件的功能一样. python2与python3安装模块的方法相似,值得注意的是,你在p ...

  5. 对路径XXX的访问被拒绝(文件操作权限)的解决方法

    对路径XXX的访问被拒绝(文件操作权限)的解决方法 参考文章: (1)对路径XXX的访问被拒绝(文件操作权限)的解决方法 (2)https://www.cnblogs.com/armyant/arch ...

  6. stl如果开o2_打开STL文件的四种最佳方法

    下载通用文件查看器(File Magic) 安装可选产品 - File Magic (Solvusoft) | EULA | Privacy Policy | Terms | Uninstall 选择 ...

  7. Java将数据信息写入文件文件的几种实现方法

    Java将数据信息写入文本文件的几种实现方法 一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个tru ...

  8. python文件的两种编译方法

    有时候,需要对python程序项目进行打包,即仅打包python文件编译后的pyc文件,就需要对python文件进行编译. 编译方法有两种: 1.写一个python简本,对所需编译的文件进行编译.(针 ...

  9. Win11提示Windows无法访问指定设备路径或文件的三种解决方法

    ​Win11提示Windows无法访问指定设备路径或文件怎么办?导致出现这一情况的原因有很多,相信有很多小伙伴们对于这一情况,都不太情况应该怎么办,对此今天小编就为大家带来三种解决方法,希望能够帮到你 ...

最新文章

  1. java遍历数据库的东西_java遍历读取整个redis数据库实例
  2. 小学生数学测试软件c语言流程图,小学生数学测试软件-C语言课程设计
  3. JavaEE 企业级分布式高级架构师课程_汇总贴
  4. java super object,java学习记录笔记--继承,super,Object类
  5. Linux内核分析——进程的描述和进程的创建
  6. python监控服务器信息进行可视化_Python实现数据可视化,看如何监控你的爬虫
  7. iOS之 随笔Xcode7的lipo
  8. Product Key Algorithm
  9. dos盘启动计算机,u盘dos启动盘怎么制作 u盘dos启动盘制作步骤【详细介绍】
  10. 计算机技术研究生省考,省考,硕士学历计算机技术(专硕)可以报计算机类的职位吗...
  11. Android改变标题栏背景颜色
  12. 深度 | 智慧城市背景下的“多规合一”标准探究
  13. 今日头条引流脚本,微商引流工具
  14. Firefox手机浏览器 v65.0.1
  15. 【224】基本功能计算器
  16. 几个chatGPT的难题,关于语言转换
  17. 施密特(smit)触发器
  18. 带孔缝箱体屏蔽效能仿真分析
  19. 阿里开源的这个库,让 Excel 导出不再复杂(简简单单的写)
  20. 用自己的数据集进行遥感图像分类---------u-net改进版dlinknet

热门文章

  1. 红旗桌面版本最新运用方式和题目问题解答100例-4
  2. php excel 下拉菜单,使用 PHPExcel 遇到的一个问题:下拉列表的数据来源过长时,显示了别的正常的下拉列表的数据来源...
  3. 电脑键盘上每个键的作用_眼看着淡出大众视野 键盘上Esc键的隐秘往事
  4. Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch
  5. Notepad++背景颜色设置
  6. Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系
  7. python jieba库下载_Python中jieba库安装步骤及失败原因解析
  8. VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...
  9. java中contains的用法_java容器中所有接口和类的用法
  10. 域名解析是否生效实时检测(阿里云DNS检测)