awk使用
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],我们会很快的为您处理。