【发布时间】:2017-04-06 16:33:30
【问题描述】:
请帮助我理解函数背后的逻辑。我有点理解它。
我的脚本:
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
final.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:表示输出字段分隔符,默认值为空格。
【问题讨论】:
-
您想知道代码如何工作/不工作/?
-
首先,我想了解一下代码背后的逻辑。其次,它是工作还是不工作。
-
您会感到困惑是可以理解的,因为脚本中有很多没有意义的地方。我们可能会猜到正在尝试什么,但我建议您使用预期的输出完成您的问题,让我们帮助您从头开始重写函数。不用担心,我们将解释解决方案的每个部分。
-
就目前而言,显示的脚本永远不会产生显示的输出。主要原因由下面的 karakfa 解释。我想你错过了一些信息。请显示正确的脚本,以便我们提供帮助。另外,您对 NR 和 FNR 的理解是错误的,但是一旦显示正确的脚本就可以解决。
-
wrt
is it working or not working- 你为什么要问?执行代码。它奏效了吗?获取 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书,了解 awk。
标签: awk