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
相关文章
- Visual Studio 2017 “无法查找或打开PDB文件“ 解决方法
- python学习:文件操作及os方法大全
- vue项目引入外部原生js文件_php引入文件的四个方法
- JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法
- ExcelVBA文件操作-打开对话框取得文件夹路径2种方法
- 将Linux文件清空的几种方法详解程序员
- 在Linux下解压RAR文件的方法(linux下解压rar文件)
- 文件Linux下快速打开文本文件的方法(linux打开文本)
- Linux系统中快速打开CSV文件的方法(linux打开csv文件)
- 文件Linux系统下快速查看CHM文档方法(linux打开chm)
- 文件解压Linux下解压RAR文件的方法(linux的rar)
- Linux 下调整文件权限的方法(linux打开文件权限)
- Linux下文件只读权限实现方法(linux文件只读权限)
- Oracle精准执行文件的正确方法(oracle执行文件)
- Linux下文件追加内容的简单方法(linux文件追加内容)
- Linux合并列文件快速方法(linux按列合并)
- 文件Linux解压缩RAR文件的简单方法(linux打开rar)
- Linux拷贝文件到U盘的方法(linux拷贝文件到u盘)
- Linux数据库文件管理技巧(linux数据库文件)
- 详解Linux CAP文件的作用及使用方法(linuxcap文件)
- Linux批量打开文件的简单方法(linux同时打开文件)
- Linux下打开TXT文件的方法(linux打开txt文件)
- Linux系统下使用PDF文件的方法(linux pdf 打开)
- 解决MySQL打不开db文件的方法(mysql不能打开.db)
- VCWinExec打开指定程序或者文件的方法
- Win2008中SqlServer2008无法打开错误日志文件导致无法启动的解决方法
- 只有mdf文件的数据库附加失败的修复方法分享(置疑、只读)
- PHP中的生成XML文件的4种方法分享
- VC6.0打开文件以及向工程中添加文件时程序崩溃自动退出解决方法
- java读取文件显示进度条的实现方法
- javascript文件中引用依赖的js文件的方法
- 如何彻底删除SVN中的文件和文件夹(附恢复方法)