请帮助我理解该功能背后的逻辑。我很难理解它。
的MyScript:
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
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
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:它表示输出字段分隔符,其默认值为空格。
答案 0 :(得分:1)
我将从这个
开始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