Awk 要在相对较大的文件上筛选csv记录吗

Awk 要在相对较大的文件上筛选csv记录吗,awk,apache-nifi,Awk,Apache Nifi,我有一个简单的流程,我想读取一个csv文件,并根据某些属性中的值过滤掉记录 文件比较大,1+gb,我不喜欢将其作为脚本运行(put、execute、get)。如果内容仍保留在FF中,我会更喜欢 在此之前,我已经成功地将ExecuteStreamCommand处理器用于SED之类的东西 但是有了AWK,我的日子不好过 所以数据是FF格式的,我想过滤12列中的值“29-12-2019” 以下命令在unix shell=>gawk-F',“{OFS=”,“if(toupper($12)=“29-12-

我有一个简单的流程,我想读取一个csv文件,并根据某些属性中的值过滤掉记录

文件比较大,1+gb,我不喜欢将其作为脚本运行(put、execute、get)。如果内容仍保留在FF中,我会更喜欢

在此之前,我已经成功地将ExecuteStreamCommand处理器用于SED之类的东西

但是有了AWK,我的日子不好过

所以数据是FF格式的,我想过滤12列中的值“29-12-2019”

以下命令在unix shell=>
gawk-F',“{OFS=”,“if(toupper($12)=“29-12-2019”)打印;}”small.csv上运行良好

下面是我的控制器的屏幕截图。AWK和GAWK的行为是一样的

数据看起来像

SNO,SNN,PN,PPC,Product_Desc,Total,Status,New,NIT,Supplier_No,SN,SD,SVV
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,23-12-2019,1
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,24-12-2019,1
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,25-12-2019,0
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,26-12-2019,0
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,27-12-2019,0
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,28-12-2019,0
1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,29-12-2019,0
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,23-12-2019,5
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,24-12-2019,2
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,25-12-2019,0
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,26-12-2019,0
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,27-12-2019,1
1,LC,967608,5.00E+12,GG 70,8,Active,,101731646,922,BT,28-12-2019,0
结果FF应该包含

1,LC,967601,5.00E+12,GG 70,2,Active,,101703207,922,BT,29-12-2019,0
添加额外跑步截图

命令的不同组合在Unix/Linux上运行良好。但不知何故,它与Nifi运行不好

尝试了更多类型……现在我想,我无法运行此功能。


请尝试以下内容(检查最后第二个字段(
$(NF-1)

或者简单地说:

awk 'BEGIN{FS=","} $12=="29-12-2019"' Input_file

您不需要在此处使用
tolower
,因为它用于将字符串值转换为小写字母,在此处不需要。

您可以尝试使用QueryRecord处理器,它允许您像查询SQL表一样查询流文件,因此您可以执行类似于
SELECT*FROM FLOWFILE WHERE SD=“29-12-2019”的操作

感谢您以代码的形式分享您的尝试,请在您的帖子中发布输入和预期输出的示例,然后让我们知道。同时添加了示例数据。由于筛选器位于第12列,我希望有一行o/PW代表FF?对不起,FF=FlowFile为什么您要调用
toupper($12)
当$12不包含任何字母时?另外,您说
我已经成功地将ExecuteStreamCommand processor用于类似SED的东西。
因此,编辑您的问题,以显示一个适用于您的SED命令示例,这样我们就可以看到您使用的是哪种引用,然后我们可以将其应用于awk脚本。您的命令有效吗d在unix上很好。但是没有使用Nifi,请看我的编辑。@RakeshPrasad,老实说,我从来没有使用过apache Nifi,因为错误看起来像是
导致的错误。我们不能在其中粘贴整条
awk
命令吗?或者如果不是整条awk,请只尝试
BEGIN{FS=“,”}$(NF-1)=“29-12-2019”
?@Rakesh从您发布的显示错误输出的图像中,您的GUI工具似乎正在从awk脚本中删除双引号,并且它不允许在脚本周围使用单引号,因此请尝试以下操作:
awk“BEGIN{FS=\”,\“}\\$12==“29-12-2019\”
awk\“BEGIN{FS=\”,\\\\\\\\\\$12==“29-12-2019\”
修改了原始帖子。运气不好。现在我正在考虑或阅读nifi实现,而不是在黑暗中拍摄。这会让所有人都知道的。@RakeshPrasad,你做了什么事情吗?Rakesh;好奇地问一下,我们可能也会学到新东西:)我可能会切换到putfile、unix脚本,然后是getfile。正如在我的测试中一样,这一直让我的性能有所提高。马特:这可以被认为是nifi处理器的缺陷吗?
awk 'BEGIN{FS=","} $12=="29-12-2019"' Input_file