awk操作两个文件

  • NR,表示awk开始执行程序后所读取的数据行数.

  • FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

下面看两个例子:

1、对于单个文件NR 和FNR 的 输出结果一样的 :

awk ‘{print NR,$0}’ file1    1 a b c d 2 a b d c 3 a c b d  
awk ‘{print FNR,$0}’ file1    1 a b c d 2 a b d c 3 a c b d  

2、但是对于多个文件 :

awk ‘{print NR,$0}’ file1 file2    1 a b c d 2 a b d c 3 a c b d 4 aa bb cc dd 5 aa bb dd cc 6 aa cc bb dd  
awk ‘{print FNR,$0}’ file1 file2    1 a b c d 2 a b d c 3 a c b d 1 aa bb cc dd 2 aa bb dd cc 3 aa cc bb dd  

在看一个例子关于NR和FNR的典型应用:

现在有两个文件格式如下:

cat account    张三|000001 李四|000002  
cat cdr    000001|10 000001|20 000002|30 000002|15  

想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:

张三  000001   10    张三  000001   20    李四  000002   30    李四  000002   15  

执行如下代码

awk -F | ‘NR==FNR{a[$2]=$0;next}{print a[$1]”   “$2}’ account cdr  

注释:

由NR=FNR为真时,判断当前读入的是第一个文件account,然后使用{a[$2]=$0;next}循环将account文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.

原文出处:pyfeng -> http://www.pyfeng.com/2019/09/awk/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。