Mám vstupní soubor oddělený čárkami (,
). Některá pole jsou uzavřena do dvojitých uvozovek a jsou v nich čárka. Zde je ukázkový řádek
123,"ABC, DEV 23",345,534.202,NAME
Potřebuji odstranit všechny čárky vyskytující se uvnitř dvojitých uvozovek a také dvojitých uvozovek. Takže výše uvedený řádek by měl být analyzován, jak je znázorněno níže
123,ABC DEV 23,345,534.202,NAME
Zkoušel jsem následující pomocí sed
ale nepřináší očekávané výsledky.
sed -e 's/(".*),(".*)/1 2/g'
Jakékoli rychlé triky s sed
, awk
nebo nějaký jiný unixový nástroj, prosím?
Přijatá odpověď:
Pokud jsou uvozovky vyvážené, budete chtít odstranit čárky mezi každou druhou uvozovkou, což lze vyjádřit pomocí awk
takhle:
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile
Výstup:
123,ABC DEV 23,345,534.202,NAME
Vysvětlení
-F"
způsobí, že awk oddělí řádek u dvojitých uvozovek, což znamená, že každé další pole bude text v uvozovkách. For-loop spustí gsub
, zkratka pro globální náhradu, na každém druhém poli, nahrazující čárku (","
) s ničím (""
). 1
na konci vyvolá výchozí blok kódu:{ print $0 }
.