AWK 两个文件字段合并处理实例

简介:

一、概念解析


1.awk命令概念


$0 表示一个文本中的一行记录

$1...N 表示一行中的第 1...N 字段

FNR     The input record number in the current input file.  #已读入当前文件的记录数

NR      The total number of input records seen so far.      #已读入的总记录数

next    Stop processing the current input record. The next input record is

       read and processing starts over with the first pattern in the AWK

       program. If the end of the input data is reached, the END block(s),

       if any, are executed.


2,处理两个文本文件


执行处理顺序:


首先,对file1执行“NR==FNR{...}”第一个循环,建立哈希数组;第二步,执行“NR>FNR{...}”第二个循环,打印输出命令结果。


(1)一种是

awk 'NR==FNR{...}NR>FNR{...}' file1 file2 或 awk 'NR==FNR{...}NR!=FNR{...}' file1 file2


(2) 另一种是

awk 'NR==FNR{...;next}{...}' file1 file2


二、处理两个文件实例


1.处理实例一

file1:

文件内容:

sina.com 52.5

sohu.com 42.5

baidu.com 35


file 2:

文件内容:

www.news.sina.com sina.com 80

www.over.sohu.com baidu.com 20

www.fa.baidu.com sohu.com 50

www.open.sina.com sina.com 60

www.sport.sohu.com sohu.com 70

www.xxx.sohu.com sohu.com 30

www.abc.sina.com sina.com 10

www.fa.baidu.com baidu.com 50

www.open.sina.com sina.com 60

www.over.sohu.com sohu.com 20


awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$2]}' f1 f2

命令结果:

www.news.sina.com sina.com 80 52.5

www.over.sohu.com baidu.com 20 35

www.fa.baidu.com sohu.com 50 42.5

www.open.sina.com sina.com 60 52.5

www.sport.sohu.com sohu.com 70 42.5

www.xxx.sohu.com sohu.com 30 42.5

www.abc.sina.com sina.com 10 52.5

www.fa.baidu.com baidu.com 50 35

www.open.sina.com sina.com 60 52.5

www.over.sohu.com sohu.com 20 42.5


2.处理实例二

需要处理的同名字段可以在两个文件中行号不同的行,无需行号排序相对应,

命令结果的行顺序依据第二个文件中同名字段顺序输出。

f1

文件内容:

10020036 beijing

10050259 lanzhou

10045682 hefei

20130495 guangzhou

20981345 shenzhen

20984748 chengdu

20891376 changsha


f2

文件内容:

guangzhou 4.5

hefei 2.6

beijing 1.3

shenzhen 8.5

changsha 0.8

chengdu 2.0

lanzhou 2.4


awk 'NR==FNR{a[$2]=$1}NR>FNR{print a[$1],$0}' f1 f2


命令输出:

20130495 guangzhou 4.5

10045682 hefei 2.6

10020036 beijing 1.3

20981345 shenzhen 8.5

20891376 changsha 0.8

20984748 chengdu 2.0

10050259 lanzhou 2.4

本文转自 pgmia 51CTO博客,原文链接:http://blog.51cto.com/heyiyi/1270688


相关文章
|
Java Linux
使用supervisor纳管java进程,自动重启服务
使用supervisor守护java进程,实现服务智能管理,自动重启。
1856 0
|
SQL 数据挖掘 数据库
HiveSQL分位数函数percentile()使用详解+实例代码
HiveSQL分位数函数percentile()使用详解+实例代码
5917 0
HiveSQL分位数函数percentile()使用详解+实例代码
|
Web App开发 Linux 测试技术
Linux下批量修改文件名(rename)
原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了 比如把所有的表为cdb1_* 修改为cdb_*的在本目录下只需要# rename 'cdb1' 'cdb' * 以前都是写个for循环来做.
6477 0
adb 和 adbd 嵌入式 c 源码分享
adb 和 adbd 嵌入式 c 源码分享
523 0
|
存储 数据可视化 数据挖掘
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
|
前端开发 数据挖掘
字节面试:领域、子域、核心域、通用域和支撑域怎么划分?
领域驱动设计(DDD)通过划分业务领域和子域简化复杂性。领域是业务问题的范围,子域是更小的专业部分。核心域代表业务的核心竞争力,如电商中的商品、订单和支付;通用域提供跨领域服务,如用户管理;支撑域支持核心功能,如物流、客服和数据分析。这种划分帮助团队专注关键业务,提高开发效率和软件对业务需求的契合度。
702 0
|
缓存 监控 前端开发
如何在 Linux 命令行中检查 CPU 使用率
【5月更文挑战第8天】
904 0
|
数据可视化
结构方程模型SEM分析心理学和营销研究数据路径图可视化
结构方程模型SEM分析心理学和营销研究数据路径图可视化
|
数据可视化 数据挖掘 Python
跟着Nature Communications学作图:R语言circlize包做漂亮的弦图
跟着Nature Communications学作图:R语言circlize包做漂亮的弦图