GNU/Linux >> Znalost Linux >  >> Linux

Odstranit čárku mezi uvozovkami pouze v souboru odděleném čárkou?

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 } .


Linux
  1. Rozdíl mezi „du -sh *“ a „du -sh ./*“?

  2. Rozdíl mezi .exrc a .vimrc?

  3. Rozdíl mezi symbolickými a pevnými odkazy?

  1. Nahradit data mezi citacemi v souboru?

  2. diff pro výstup pouze názvů souborů

  3. Jaké jsou rozdíly mezi grep, awk a sed?

  1. Jaký je rozdíl mezi fsync a syncfs?

  2. Bash skript pro odstranění nejstaršího souboru ze složky

  3. jak odstranit dvojité uvozovky v csv