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í:
-
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).
-
Z nabídky vyberte „Hledat a nahradit“ (obvykle se nachází pod „Upravit“, pokud neexistuje samostatná nabídka „Hledat“).
-
Zadejte
_
do vyhledávacího pole a,
do náhradní krabice. -
Klikněte na "Nahradit vše".
-
Opakujte s
"
ve vyhledávacím poli a nic v poli pro náhradu. -
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.