awk 多文件操作2种实现方法
我们经常会将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种实现方法相关推荐
- 电脑快捷方式删除文件后四种找回方法
快捷指令是一种用作替代快捷键操作的技术.也可以称为"快捷键","快捷方式"或"快捷键序列",它们允许用户在非常快速和方便的方式建立特定操作序 ...
- 上传文件的几种主要方法。
上传文件的几种主要方法. 第一种:经典的form和input上传. 设置form的aciton为后端页面,enctype="multipart/form-data",type='p ...
- 如何添加修改hosts文件?几种修改方法让你简单方便管理
如何修改hosts文件?几种修改方法让你简单方便快捷,hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库&q ...
- python第三方模块安装路径_Python第三方Window模块文件的几种安装方法
python安装第三方模块 使用软件管理工具pip python自带了包管理工具,就像手机app商城,91助手等软件的功能一样. python2与python3安装模块的方法相似,值得注意的是,你在p ...
- 对路径XXX的访问被拒绝(文件操作权限)的解决方法
对路径XXX的访问被拒绝(文件操作权限)的解决方法 参考文章: (1)对路径XXX的访问被拒绝(文件操作权限)的解决方法 (2)https://www.cnblogs.com/armyant/arch ...
- stl如果开o2_打开STL文件的四种最佳方法
下载通用文件查看器(File Magic) 安装可选产品 - File Magic (Solvusoft) | EULA | Privacy Policy | Terms | Uninstall 选择 ...
- Java将数据信息写入文件文件的几种实现方法
Java将数据信息写入文本文件的几种实现方法 一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个tru ...
- python文件的两种编译方法
有时候,需要对python程序项目进行打包,即仅打包python文件编译后的pyc文件,就需要对python文件进行编译. 编译方法有两种: 1.写一个python简本,对所需编译的文件进行编译.(针 ...
- Win11提示Windows无法访问指定设备路径或文件的三种解决方法
Win11提示Windows无法访问指定设备路径或文件怎么办?导致出现这一情况的原因有很多,相信有很多小伙伴们对于这一情况,都不太情况应该怎么办,对此今天小编就为大家带来三种解决方法,希望能够帮到你 ...
最新文章
- java遍历数据库的东西_java遍历读取整个redis数据库实例
- 小学生数学测试软件c语言流程图,小学生数学测试软件-C语言课程设计
- JavaEE 企业级分布式高级架构师课程_汇总贴
- java super object,java学习记录笔记--继承,super,Object类
- Linux内核分析——进程的描述和进程的创建
- python监控服务器信息进行可视化_Python实现数据可视化,看如何监控你的爬虫
- iOS之 随笔Xcode7的lipo
- Product Key Algorithm
- dos盘启动计算机,u盘dos启动盘怎么制作 u盘dos启动盘制作步骤【详细介绍】
- 计算机技术研究生省考,省考,硕士学历计算机技术(专硕)可以报计算机类的职位吗...
- Android改变标题栏背景颜色
- 深度 | 智慧城市背景下的“多规合一”标准探究
- 今日头条引流脚本,微商引流工具
- Firefox手机浏览器 v65.0.1
- 【224】基本功能计算器
- 几个chatGPT的难题,关于语言转换
- 施密特(smit)触发器
- 带孔缝箱体屏蔽效能仿真分析
- 阿里开源的这个库,让 Excel 导出不再复杂(简简单单的写)
- 用自己的数据集进行遥感图像分类---------u-net改进版dlinknet
热门文章
- 红旗桌面版本最新运用方式和题目问题解答100例-4
- php excel 下拉菜单,使用 PHPExcel 遇到的一个问题:下拉列表的数据来源过长时,显示了别的正常的下拉列表的数据来源...
- 电脑键盘上每个键的作用_眼看着淡出大众视野 键盘上Esc键的隐秘往事
- Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch
- Notepad++背景颜色设置
- Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系
- python jieba库下载_Python中jieba库安装步骤及失败原因解析
- VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...
- java中contains的用法_java容器中所有接口和类的用法
- 域名解析是否生效实时检测(阿里云DNS检测)