NR == FNR awk问题

时间:2019-04-14   点击: 次   字体:【

注意:
如果NR = FNR,则假设当前正在读取第一文件a,然后使用循环{a[$ 2]= $ 0;}来存储矩阵a中的文件的每一行。两个字段称为下标。
当NR = FNR为假时,判断当前读取了第二个文件b,{a[$ 2]= $ 0;第二个cdr文件的每一行无条件执行{printa[对于$ 1]“|”$ 2},$ 1变量是第二个文件的第一个字段,第一个文件的第二个$ 2文件是读取第一个文件时的数组索引,并且它是一样的。
所以你可以在这里使用[$ 1]来引用矩阵。
==================================================================================================================================
以下是对CU神流程jason 680的详细分析。
awk -F'|''NR = = FNR{a[$ 2]= $ 0;{printa[$ 1]FS $ 2}'ab
noBEGINblock和FS =“|” - F参数“|”不启动模块,直接识别-F选项,并添加参数。
Starttofirstfile'a'以文件a的第一行开头。
Readfilealine1andgetdata张三| 000001读取文件的第一行a并获取数据A.000001B:$ 1 = Chang Sang C:$ 2 = 000001
NR和FNR等于1,并且runNR = FNRblock,其中NR和FNR具有值1,并且执行NR = FNR。NR == FNR{a[$ 2]= $ 0; A:a[$ 2]= $ 0 a[00000 1]=张先生|
Readfilealine2andgetdata Li four |读取文件000002a的第二行并获取数据
答:$ 0 =李四| 00000 2 B:$ 1 = C:$ 2 = 000002
此时,NR和FNR的值相等,NR = FNR模块NR == FNR{a[$ 2]= $ 0;A:a[$ 2]= $ 0a[000002]= Li four | 000002B:nextnextcycle和getnextlinedata的数据
退出filea,getnextfilebdata将文件读入下一个文件,然后从该文件中读取数据。
3
Readfilebline1和getdata000001 | 10读取文件b的第一行并获取数据A.$ 0 = 000001 | 1010 B:$ 1 = 000001 C:$ 2 = 10
现在,在这些情况下,NRis3和FNRis1,NF = FNR模块具有不同的NR和FNR值,并执行以下模块。{Printa[$ 1]FS $ 2}anddidn'trunNR = FNRblock,andrunnextblock{printa[$ 1]FS $ 2}一个[$ 1]= A[000001]=张| 000001FS = | $ 2 = 10你卖出000001 | 10年
4
Readfilebline2和getdata000001 | 20A:$ 0 = 000001 | 20B:$ 1 = 000001 C:$ 2 = 20
NRis4和FNRis2,它们返回音符的数量及其原始值= FNRblock,并且runnextblock{printa[$ 1]FS $ 2}a[$ 1]= a[000001]= Zhang San | 000001FS = | $ 2= 20 youwillseetheeputputhang 000001FS |
循环文件b5。
Readfilebline3,ygetdata000002 | 30
输出= =李四| 000002 | 30
6
Readfilebline4,ygetdata000002 | 15年
输出= =李四| 000002 | 15年