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 ...
随机推荐
- 虚拟机安装的UBUNTU怎么全屏
虚拟机下面安装了ubuntu系统,显示的屏幕只有那么一小块儿,不知道如何才能全屏,那么如何全屏呢?且看下面经验. 步骤阅读 百度经验:jingyan.baidu.com 方法/步骤 1 打开虚拟机 ...
- java的多线程总结
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: class 类名 extends Thread ...
- androidSDK无法更新的解决方法之一
方法来源于: http://www.eoeandroid.com/thread-281075-1-1.html 试试这个,能解决国内访问Google服务器的困难启动 Android SDK Manag ...
- 如何在Actionbarsherlock中一直显示overflow效果?
对Android开发一致性有一定考虑的程序员应当或多或少对Actionbarsherlock这个库有一定的了解.Actionbarsherlock的产生是因为Android在3.0(API 11)之后 ...
- Moom for mac 最棒的窗口管理软件
win7下,鼠标拖动窗口向左.右,两个窗口就在一个桌面上平分秋色了 mac下只能使用三只爪向上的手势查看当前桌面运行的程序,或者三只爪左右滑动查看全屏显示的其他程序,有时候一边看书一边敲代码很不方便 ...
- JS中NULL和Undefined的区别
NULL是表示一个”无“的对象,转换成数值为0:undefined是一个“无”的原始值,转为数值为NaN: 当声明的变量还未被初始化时,变量的默认值为undefined: null用来表示尚未存在的对 ...
- DBA必备:MySQL数据库常用操作和技巧
DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...
- AngularJS中的按需加载ocLazyLoad
欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...
- Alwayson--SYS.dm_hadr_instance_node_map 返回0行
下面是MSDN关于SYS.dm_hadr_instance_node_map 的解释,我就不在翻译了 For every instance of SQL Server that hosts an av ...
- servlet 中文乱码问题
两步骤搞定: 1,修改tomcat的server.xml <Connector port="8080" protocol="HTTP/1.1" conne ...