awk打开多个文件的方法
1、当awk读取的文件只有两个的时候,比较常用的有三种方法
(1)awk 'NR==FNR{...}NR>FNR{...}' file1 file2
(2)awk 'NR==FNR{...}NR!=FNR{...}' file1 file2
(3)awk 'NR==FNR{...;next}{...}' file1 file2
next表示下一个命令不被执行
2、当awk处理的文件超过两个时,显然上面那种方法就不适用了。因为读第3个文件或以上时,也满足NR>FNR (NR!=FNR),显然无法区分开来。
所以就要用到更通用的方法了:
(1)ARGIND 当前被处理参数标志: awk 'ARGIND==1{...}ARGIND==2{...}ARGIND==3{...}... ' file1 file2 file3 ...
(2)ARGV 命令行参数数组: awk 'FILENAME==ARGV[1]{...}FILENAME==ARGV[2]{...}FILENAME==ARGV[3]{...}...' file1 file2 file3 ...
(3)把文件名直接加入判断: awk 'FILENAME=="file1"{...}FILENAME=="file2"{...}FILENAME=="file3"{...}...' file1 file2 file3 ...
举例说明,这个例子在面试的时候问过。
a.txt中有一列:
A
B
C
D
E
b.txt中有两列:
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy
F fail to pass the exam
G good result
则打印出b.txt中的行,满足b.txt中第一列等于a.txt的第一列。
#! /usr/bin/ksh print "Method1:########"
awk 'ARGIND==1{test[NR]=$1}
ARGIND==2{for(i in test){if(test[i]==$1){print $0}}}' a.txt b.txt print "\nMethod2:########"
#the '{" must at the same line of the NR!=FNR
gawk 'NR==FNR{test[NR]=$1}
NR!=FNR{
for( i in test)
{
if(test[i]==$1)
print $0
}
}' a.txt b.txt print "\nMethod3:########"
gawk 'NR==FNR{test[NR]=$1}
NR>FNR{
for( i in test)
{
if(test[i]==$1)
print $0
}
}' a.txt b.txt print "\nMethod4:########"
gawk 'NR==FNR{test[NR]=$1;next}
{
for( i in test)
{
if(test[i]==$1)
print $0
}
}' a.txt b.txt print "\nMethod5:########"
gawk 'FILENAME==ARGV[1]{test[NR]=$1}
FILENAME==ARGV[2]{
for( i in test)
{
if(test[i]==$1)
print $0
}
}' a.txt b.txt print "\nMethod6:########"
gawk 'FILENAME=="a.txt"{test[NR]=$1}
FILENAME=="b.txt"{
for( i in test)
{
if(test[i]==$1)
print $0
}
}' a.txt b.txt
输出结果为:
Method1:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy Method2:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy Method3:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy Method4:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy Method5:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy Method6:########
A hello world
A good morning
B what
C sad
D interview someone
D feeling bad
E not so good
E want to be happy
awk打开多个文件的方法的更多相关文章
- 1、awk打开多个文件的方法
转载:http://www.cnblogs.com/Berryxiong/p/6209324.html 1.当awk读取的文件只有两个的时候,比较常用的有三种方法(1)awk 'NR==FNR{... ...
- 分享:Perl打开与读取文件的方法
在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作. Perl打开与读取文件的方法,供大家学习参考.本文转自: ...
- python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法
引用自“鱼c工作室” 文件的打开模式和文件对象方法 : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...
- vim-缓存区中打开另外一个文件的方法
现在有这么一种情况: 我现在在ubuntu用户根目录下-- 我根目录下有一个文件夹blogs,这个文件夹下面有两个文件:text1,text2. 我现在从-目录下进行如下操作 ...
- [转帖] 打开加密SQLite文件的方法
Copy From http://blog.csdn.net/sean4m/article/details/50211565 mark 下 正好工作用到了这个东西. 版本:SQLiteExpertPr ...
- 页面打开pdf格式文件的方法
<embed width=500 height=300 fullscreen=yes src="1.pdf" />
- 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】
试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...
- 问题-[Access]“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法
问题现象:ado.net oledb方式访问Access数据库文件时报错“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法 问题处理:1.数据库名称不能命名为:Syste ...
- ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法
2019年4月 拓展: ArcGis——好好的属性表,咋就乱码了呢? 2019年3月27日补充: 在ArcMap10.3+(根据官网描述应该是,作者测试使用10.5,可行)以后的版本,可以使用ArcT ...
随机推荐
- java之多线程之一/序列化和反序列化
线程安全: 如何自己手动创建一个线程 答:继承Thread类或实现Runnable接口 public class Mythread extends Thread{ @Override public v ...
- ES6 数组解构赋值
.数组解构 let [a, b, c,d] = ["aa", "bb", 77,88]; alert(a) //弹出aa 可以用babel 解析看ES5的转换结 ...
- Hibernate总结2 API和配置文件
1,Configuration 配置 获取config配置文件的方法 Configuration cfg = new Configuration(); cfg.下面的方法 configure() co ...
- PHPExcel
1.PHPExcel类中读取Excel文件相关函数和使用方法 插件官网:http://phpexcel.codeplex.com/ <?php require_once 'Classes/PHP ...
- codevs 1033 蚯蚓的游戏问题
Description 在一块梯形田地上,一群蚯蚓在做收集食物游戏.蚯蚓们把梯形田地上的食物堆积整理如下: a(1,1) a(1,2)…a(1,m) a(2,1) a(2,2) a(2,3)…a ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- YII框架概念与安装
Yii概念: YII安装: 下载最版本http://www.framework.com 解压至访问目录下 直接打开advanced/init.bat文件输入0之后输入yes 打不开 ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- mac系统上使用压缩包版的mysql(非安装版)
mac本换了块固态硬盘,一切重新装过,mysql嫌官网下载太慢,直接百度 "mysql mac",第一个就是: 不料下载完后,发现这是一个压缩包版,并没有安装程序.网上搜索了一下, ...
- 前端见微知著番外篇:Bitbucket进行代码管控
说道代码管控,一般都会提到TFS.Git等,但是在这里我们将要用到Bitbucket,其实其操作方式和Git基本上一样,但是和TFS则有很大的不同了.但是原理基本上都是一致的. 这里我不会过多的涉及到 ...