请帮助我理解函数背后的逻辑。我有点困惑地理解它。
我的脚本:
generate_exception(){
awk -F "," 'FNR==NR{a[ins,INS]=ins "," INS;next}{ if (!a[ins,INS]) print $0,"is not available"}' OFS="," my_$1_lookup.csv final.csv >> exception.csv
}
generate_exception ins INS
my_ins_lookup.csv
STANDARD & POORS,XS00001,ISS ILN,SG CORP
STANDARD & POORS,XS00002,ISS ILN,SG CORP
STANDARD & POORS,XS00003,PM,US CORP
STANDARD & POORS,XS00004,LMT,US CORP
STANDARD & POORS,XS00005,NAT,FR CORP
决赛.csv
MOODYS,USEQ27,N.A.
STANDARD & POORS,XS00001,N.A.
MOODYS,SGD,NR
STANDARD & POORS,XS00004,N.A.
以下是我的理解:
FS:字段分隔符(默认空格(
NF:当前记录中的字段数
NR:当前记录数
NR:表示当前记录的编号。例如,以下示例在当前记录包含的字段少于三个时打印记录。
FNR:它类似于NR,但相对于当前文件。它在以下情况下很有用AWK 正在处理多个文件。FNR 的值使用新文件重置。
ORS:它表示输出记录分隔符,其默认值为换行符。
OFS:它表示输出字段分隔符,其默认值为空格。
我将从这个开始
awk -F "," 'FNR==NR{a[ins,INS]=ins "," INS; next}...
在第一次文件处理期间(当前文件记录数等于全局记录数(,用值填充二维数组。 但是,ins
和 INS
都没有在其他任何地方定义,所以这里无法完成太多工作......
我的猜测是,您必须根据输入文件将ins
替换为$1
,INS
替换为$2
。
重写可以是
awk -F, 'FNR==NR {a[$1,$2]; next}
!(($1,$2) in a) {print $0, "is not available"}' file1 file2