我有以下代码:
awk -F\; 'FNR==NR{a[$3]=$3;a[$9]=$9;a[$11]=$11;next}(a[$3]!=""){print $3, $9, $11, a[$3], a[$9], a[$11]}' $fileB $fileA |awk '($4!="" && $5=="" && $6==""){print $1}' > temp
awk命令在输入中接收2个文件。我想了解在比较文件时进行的检查。
由于
答案 0 :(得分:1)
如果你只是询问脚本如何确定它正在处理哪个文件,那就是FNR==NR
位。
FNR
变量是正在处理的当前文件的记录号,当您开始处理新文件时,它会重置为1。
NR
变量是正在处理的所有文件集的记录号,移动到新文件时 重置。
因此FNR
和NR
仅对正在处理的第一个文件相同。假设您正在处理三个文件,每个文件的长度为一百行。 NR
和FNR
的值如下:
File # NR FNR
------ ------- -------
File 1 1-100 1-100
File 2 101-200 1-100
File 3 201-300 1-100
因此,使用问题中的第一个awk
脚本,第一个文件仅用于填充a
数组。 next
的使用保证不会为该文件中的行运行其他代码。
第二个文件将使用某些列中的值来输出列以及先前创建的数组中的相关值。