GNU/Linux >> Znalost Linux >  >> Linux

Nahrazení podtržítka čárkou a odstranění dvojitých uvozovek v CSV

Daleko jednodušší způsob je použít tr

$ tr '_' ',' < input.csv | tr -d '"'                  
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

Funguje to tak, že tr bere dva argumenty - sadu znaků, které mají být nahrazeny, a jejich nahrazení. V tomto případě máme pouze sady 1 znaku. Přesměrováváme input.csv zadejte tr stdin stream přes < shell a výsledný výstup převede na tr -d '"' pro odstranění dvojitých uvozovek.

Ale awk umí to taky.

$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

Způsob, jakým to funguje, je mírně odlišný:awk čte každý soubor řádek po řádku, každý vložený skript je /Pattern match/{ codeblock}/Another pattern/{code block for this pattern} . Zde nemáme vzor, ​​takže to znamená provést codeblock pro každý řádek. gsub() Funkce se používá pro globální substituci v rámci řádku, takže ji používáme k nahrazení podtržítek čárkami a dvojitých uvozovek řetězcem null (efektivně smažeme znak). 1 je místo shody vzoru s chybějícím blokem kódu, který se ve výchozím nastavení jednoduše vytiskne na řádek; jinými slovy kódový blok s gsub() provede úlohu a 1 vytiskne výsledek.

Použijte přesměrování shellu (> ) pro odeslání výstupu do nového souboru:

 awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv

Jako alternativu můžete také použít tento sed příkaz:

$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

Perl, "švýcarská armádní motorová pila" pro zpracování textu z příkazové řádky, to také umí. Syntaxe je (ne náhodou) docela podobná tr a sed příklady:

perl -pe 'tr/_"/,/d' input.csv > result.csv

nebo:

perl -pe 's/_/,/g; s/"//g' input.csv > result.csv

Ale upřímně, pokud si nechcete věnovat čas na to, abyste se naučili nový programovací jazyk (což je opravdu to, co awk, Perl a sed a další nástroje jsou) jen pro tento základní úkol, můžete to stejně dobře udělat v jakýkoli textový editor, který podporuje vyhledávání a nahrazování:

  1. Otevřete soubor CSV ve svém oblíbeném textovém editoru (jako je gedit, kate, podložka pod myš atd.; dokonce i obyčejný starý Poznámkový blok nebo Wordpad ve Windows).

  2. Z nabídky vyberte „Hledat a nahradit“ (obvykle se nachází pod „Upravit“, pokud neexistuje samostatná nabídka „Hledat“).

  3. Zadejte _ do vyhledávacího pole a , do náhradní krabice.

  4. Klikněte na "Nahradit vše".

  5. Opakujte s " ve vyhledávacím poli a nic v poli pro náhradu.

  6. Uložte soubor.

Nyní, pokud to potřebujete udělat pro 100 nebo 1000 souborů namísto pouze jednoho, pak učení nového nástroje příkazového řádku začíná dávat smysl. A samozřejmě, jakmile budete vědět, jak používat Perl nebo sed nebo cokoli jiného, ​​ušetříte si později spoustu času a úsilí s podobnými úkoly. Ale pro jednorázovou práci, kterou neočekáváte, že ji budete muset dělat znovu, je někdy nejjednodušším řešením základní interaktivní nástroj, jako je textový editor.


Linux
  1. Proč se Tilda (~) nerozšíří uvnitř dvojitých uvozovek?

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

  3. Vytisknout řetězec obsahující jednotlivé uvozovky a další speciální znaky?

  1. Vytváření a odstraňování souborů a adresářů pod Linuxem

  2. Přidat dvojité uvozovky kolem polí ve výstupu skriptu AWK?

  3. Co je dvojitá tečka (..) a jedna tečka (.) v Linuxu?

  1. Kdy je nutné dvojité uvozování?

  2. Jak uniknout citacím v Shellu?

  3. jak odstranit dvojité uvozovky v csv