• awk中的NR FNR


    shell编程中,awk简直就是一把利器,你能够把它看成shell的一部分,也能够看成一种单独的语言,功能十分强大。今天先来说一说NR与FNR

    先准备两个文件:

    1.txt,内容为:

    user password

    wolf 123456

    zys 123

    2.txt 内容为:

    id user

    0001 wolf

    0002 xiaozhai

    事实上在处理单个文件时,NR与FNR都一样。表示当前读取的行号,如运行awk '{print NR}' 1.txt 和运行 awk '{print FNR}' 1.txt,结果都一样,均为

    1

    2

    3

    可是当处理两个文件时,awk先读取第一个文件。此时NR与FNR相等。可是当读取第二个文件时,FNR从新開始计数,而NR继续增长。此时就不相等了。

    运行awk '{print NR" "FNR}' 1.txt 2,txt 结果例如以下:

    1 1

    2 2

    3 3

    4 1

    5 2

    6 3

    借助这个特性,结合awk的循环和数组。awk很适合处理查找两个文件里有同样记录域的关联信息,如查找存在于1.txt中的用户。且此用户也存在于2.txt中的password。最后打印username和相应的password, awk 'NR==FNR{a[$1]=$2;next} {if(a[$2]){print $2" "a[$2];}}' 1.txt 2.txt ,注意一定要用单引號。结果为:

    user passwd

    wolf 123456


    解释一下这个命令:当NR==FNR时。即读取第一个文件的时候,先用循环把1.txt中的信息存到数组a中;当NR不等于FNR时,即读取第二个文件的时候。此时$2相应与2.txt中user列。若数组a中有相应与当前行user的记录。则打印user(即$2)和passwd(即a[$2])。

    awk的功能由此可见真是非常强大。



  • 相关阅读:
    iOS开发进阶
    iOS开发UI篇—Quartz2D使用(绘图路径)
    iOS开发UI篇—控制器的View的创建
    iOS开发UI篇—Quartz2D简单使用(三)
    iOS开发从入门到精通
    win7访问win10需要用户名密码
    win10启用guest来宾账户的教程
    2021 年终总结
    vue elementui 树形
    js递归生成树形结构
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6791615.html
Copyright © 2020-2023  润新知