хотите отфильтровать записи в формате csv относительно большого файла - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть простой поток, где я хочу прочитать CSV-файл и отфильтровать запись в зависимости от значения в каком-либо атрибуте.

Файл относительно большой, 1 + ГБ, и я не буду запускаться это как скрипт (поставить, выполнить, получить). Я предпочитаю, чтобы содержимое оставалось в FF.

ранее, я успешно использовал процессор ExecuteStreamCommand для чего-то вроде SED.

, но с AWK у меня трудное время.

поэтому данные находятся в FF, и я хочу фильтровать по 12 столбцу со значением «29-12-2019»

следующая команда отлично работает на unix shell => gawk -F ',' '{OFS=",";if(toupper($12) == "29-12-2019") print;}' small.csv

следующим это скриншот с моего контроллера. AWK и GAWK ведут себя одинаково.

enter image description here

enter image description here

данные выглядят как

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 , но так или иначе это не работает с Нифи.

enter image description here enter image description here enter image description here

пробовал пару еще типа ... теперь я думаю, никоим образом я не могу запустить это.

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Не могли бы вы попробовать следующее (отметьте 2-е последнее поле ($(NF-1) строк).

awk 'BEGIN{FS=","} $(NF-1)=="29-12-2019"'  Input_file

ИЛИ просто:

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

Вам не нужно использовать tolower здесь, потому что это используется для преобразования строковых значений в маленькие буквы, здесь не нужно.

0 голосов
/ 17 апреля 2020

Вы можете попробовать процессор QueryRecord, он позволяет запрашивать файл потока, как если бы это была таблица SQL, поэтому вы можете сделать что-то вроде SELECT * FROM FLOWFILE WHERE SD = "29-12-2019"

...