Chci extrahovat data mezi „ “ z datového souboru s oddělovačem jako čárkou.
Ukázkový vstupní soubor:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,
Očekávané o/p:
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,
Přijatá odpověď:
Za předpokladu, že se jedná o správně naformátovaný CSV (ukázková data vypadají v tomto ohledu dobře), můžeme použít csvformat
z csvkit
dočasně změnit oddělovače polí na jiný znak, který se jinak v datech nevyskytuje, například @
, odstraňte všechny čárky a znovu změňte oddělovač pole zpět na výchozí:
$ csvformat -D '@' file.csv | tr -d , | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,
Výstup nemá uvozovky kolem pole, které jsme upravili, ale to proto, že už to nepotřebuje.
Je zřejmé, že „smazání všech čárek“ může smazat čárky, které ve skutečnosti smazat nechceme, takže můžeme být trochu selektivnější a smazat pouze čárky v 7. poli:
$ csvformat -D '@' file.csv | awk -F '@' 'BEGIN { OFS=FS } { gsub(",", "", $7); print }' | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,
Proč to „při čtení“ funguje v terminálu, ale ne ve skriptu Shell?
Spustit službu Systemd po automatickém připojení, ale poté, co k ní přistoupíte?