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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 3.5安装_MYSQL学习笔记-06-搭建数据库

文章内容输出来源&#xff1a;拉勾教育Java高薪训练营1. 安装说明基于Ubuntu Linux系统安装&#xff0c;MySQL版本是5.7.29。安装方式是通过官网下载相应的tar.gz压缩包进行安装。这种方式需要自己动手的部分比较多&#xff0c;如配置文件的设计、环境变量的配置、开机启动服务…

Hibernate中hql的基本查询、条件查询、排序插叙、分页查询、投影查询

hql语句和sql语句不同&#xff0c;当我们使用hql语句查询时&#xff0c;要把SQL语句的表写成 实体类的类名&#xff0c;字段写成实体类的属性 基本查询:查出数据库中所有的数据 代码如下&#xff1a; //基本查询&#xff0c;查询所有的实体Testpublic void test1() {//获取当…

【转】小周立波张冯喜引爆达人秀 小童星家居照大曝光

原文地址&#xff1a;http://www.soufun.com/news/2010-10-13/3897753.html 小小年纪&#xff0c;一身西装&#xff0c;发式清爽&#xff0c;腔调十足&#xff0c;有观众说她“天才有余&#xff0c;天真不足”&#xff0c;她自己说“进演艺圈太累了”&#xff0c;刚踏进演艺圈就…

mysql命令教学_mysql常用命令有什么

mysql常用命令有&#xff1a;1、“create database name;”&#xff1b;2、“use databasename;”&#xff1b;3、“drop database name”&#xff1b;4、“show tables;”&#xff1b;5、“select version”等等。MySQL 数据库常用命令1、MySQL常用命令create database name; …

Struts2一对多配置

在多表映射配置时&#xff0c;我们应该遵循以下不步骤&#xff1a; 确定两张表之间的关系在数据库中实现两张表之间的关系建立在实体类中描述出两个实体类之间的关系在映射配置文件中建立两个实体和两张表之间的关系 我们就按照上面的步骤做&#xff0c;我这里有一张联系人表和…

调整和改编赛车游戏——游戏屏幕

游戏屏幕 赛车游戏中有很多不同的游戏屏幕&#xff0c;这些都是由RacingGame类中的gameScreens堆栈管理的。本节介绍游戏中使用的大部分屏幕和对应的功能。大多数游戏屏幕相当简单&#xff0c;但其他的有点复杂并实现了一个单元测试&#xff0c;通过单元测试能更好地了解这个类…

mysql 锁 代码_MySQL中的锁实例

表结构&#xff1a;id&#xff1a;自增主键&#xff0c;a&#xff1a;无索引&#xff0c;b&#xff1a;普通索引CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,a int(4) NOT NULL DEFAULT 0,b int(4) NOT NULL DEFAULT 0,PRIMARY KEY (id),KEY b (b) USING BTREE) EN…

Linux文件属性之r、w、x

r&#xff1a; 对于文件来说&#xff0c;具有读取文件内容的权限&#xff1b;对于目录来说&#xff0c;具有浏览目录内文件的权限 w&#xff1a; 对于文件&#xff0c;具有修改文件内容的权限&#xff1b;对于目录&#xff0c;具有新建、删除、移动、修改文件目录内的权限 …

trie树--详解

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 文章作者&#xff1a;yx_th000 文章来源&#xff1a;Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明&#xff0c;谢谢合作。关键词&#xff1a;trie trie树 数据结构前几天学习了并查集和trie树&am…

yii mysql gii_Yii Gii使用

准备数据库第1步 - 创建一个新的数据库。数据库可以通过以下两种方式进行。在终端运行 mysql -u root –p登录数据后&#xff0c;通过执行 CREATE DATABASE mystudy CHARACTER SET utf8 COLLATE utf8_general_ci; 创建一个新的数据库;第2步 - 在 config/db.php 文件中配置数据库…

通过OracleDataReader来读取BLOB类型的数据 (转载)

通过OracleDataReader来读取BLOB类型的数据 在实际的应用过程中&#xff0c;需要把大块的二进制数据存储在数据库中。读取这些大块的数据&#xff0c;可以通过强制类型转换成为byte数组&#xff0c;但是当这个二进制数据体够大时&#xff08;几十兆或者上百兆&#xff09;&…

PHP简介

PHP原始为Personal Home Page的缩写&#xff0c;已经正式更名为 “PHP: Hypertext Preprocessor”。PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了…

java 事务_Java中事务总结详解(精华)

1.什么是JAVA事务&#xff1f;通常的观念认为&#xff0c;事务仅与数据库相关。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性&#xff1a;表示事务执行过程中的任何失败都…

ellen 纽奥良大学演讲

英 文 中 文 Thank you, President Cowan, Mrs. President Cowen; distinguished guests, undistinguished guests - you know who you are, honored faculty and creepy Spanish teacher. And thank you to all the graduating class of 2009, I realize most of you are hu…

xampp启动Apache端口被占用,修改端口

apache启动端口被占用有可能是80端口被占用&#xff0c;也用可能是443端口被占用。修改这两个端口方法如下&#xff1a; 首先打开xampp&#xff0c;点击下图的config 如果是80端口被占用&#xff0c;选择httpd,conf,会自动打开这个文件&#xff0c;然后在文件里查找80 找到以…

java怎么获取当前日期_JAVA中获取当前系统时间

一. 获取当前系统时间和日期并格式化输出:import java.util.Date;import java.text.SimpleDateFormat;public class NowString {public static void main(String[] args) {SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式System.o…

Microsoft SharePoint Server 2010 的新增功能

Microsoft SharePoint Server 2010 包括几个关键的增强和新增功能。重新设计的用户界面中的功能区通过将命令放置到更易于导航的基于任务的选项卡上&#xff0c;来帮助您更快地完成工作。可以跨多个 Internet 浏览器工作&#xff0c;例如 Microsoft Internet Explorer 7.0 和 8…

php四种定界符

1.标准风格 <?php//代码 ?>2.短标记风格 <?//代码 ?>默认情况下是不可以这样写的&#xff0c;我们要到php.ini文件里修改一个配置 找到php.ini文件,我用的是xampp,所以就是以他为例&#xff0c;其他找到php.ini文件方法百度一下就知道了 点击Apache的config&…

周易Java_周易API接口_免费数据接口 - 极速数据

package api.jisuapi.zhouyi;import java.net.URLEncoder;import api.util.HttpUtil;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Search {public static final String APPKEY "your_appkey_here";// 你的appkeypublic static final …

SharePoint SiteCollection 和SubWeb之间的迁移

因为各种不同的原因&#xff0c;项目里可能碰到需要将一个Site Collection迁移为一个子站点的情况。 实现这种需求只能用 内容部署功能中的导出和导入〉 SiteCollectoin to sub web 示例&#xff1a; cd C:\Program Files\Common Files\Microsoft Shared\web server extensions…