2015-01-20 2 views
0

У меня есть большой файл CSV (5Go). Заголовок:Удалить строки в CSV-файле с условием столбца в bash

run number,export,downerQ,coefUpQuality,chooseMode,demandF,nbPLots,standarDevPop,nbCitys,whatWord,priceMaxWineF,marketColor,[step],giniIndexReserve,giniIndexPatch,meanQualityTotal,meanQualityMountain,meanQualityPlain,DiffExtCentral,nbcentralPlots,meanPatchByNetwork,sum_q_viti_moutain,sum_q_viti_plaine 
"3","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.07083333333333335","0","0","0","0","0","0","48","0" 
"4","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.04285714285714286","0","0","0","0","0","0","42","0" 
"2","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.05348837209302328","0","0","0","0","0","0","43","0" 

Я хотел бы держать только те строки, которые содержат «500» в поле [Стадия] (тринадцатое поле).

  • Я попытался импортировать CSV в SQLite ... но удаление аварии ...
  • R также аварии (даже с FREAD из data.table)

ли кто-то есть решение с инструментами вроде sed, awk или любой другой командой?

+2

Проверьте [csvfix] (https://code.google.com/p/csvfix/). Это, безусловно, может это сделать. В оболочке первым шагом может быть «grep -E», «run number», «500», «», чтобы выбрать строку заголовка и строки, содержащие где-то 500; вы можете свернуть его до 500 в столбце 13 с помощью 'awk'. Или вы можете выполнить всю работу в awk: 'awk -F, 'NR == 1 || $ 13 == "\" 500 \ "" {print} ''(непроверенный, вам может потребоваться установить' OFS' ',' тоже, но, вероятно, нет). –

ответ

4

AWK кажется путь:

awk -F, 'NR == 1 || $13 == "\"500\""' filename 

Где NR == 1 является сохранение первой строки (заголовок), и после того, что это только те строки, из которых 13-поле является "500".

+0

Танк вы зимуют и Джонатан ... не забудьте '-F,' для '--field-separator' – delaye

Смежные вопросы