Znacznie prostszym sposobem jest użycie tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Działa to w ten sposób, że tr
wymaga dwóch argumentów - zestawu znaków do zastąpienia i ich zamiany. W tym przypadku mamy tylko zestawy 1 znaku. Przekierowaniu input.csv
wejściowy tr
strumieniu użytkownika stdin przez <
operatora, powłoki rur i uzyskaną wyjście tr -d '"'
aby usunąć podwójne notowania.
Ale też awk
mogę to zrobić.
$ 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
Sposób działania jest nieco inny: awk odczytuje każdy plik linia po linii, każdy skrypt jest w linii /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Tutaj nie mamy wzorca, więc oznacza to wykonanie kodu dla każdej linii. gsub()
funkcja jest używana do globalnego podstawiania w linii, dlatego używamy jej do zastępowania znaków podkreślenia przecinkami, a podwójnych cudzysłowów łańcuchem pustym (skutecznie usuwając znak). 1
Jest w miejscu spotkania z wzorca brakuje blok kodu, który domyślnie po prostu do drukowania linii; innymi słowy, kod z gsub()
robi zadanie i 1
drukuje wynik.
Użyj przekierowania powłoki ( >
), aby wysłać dane wyjściowe do nowego pliku:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv
Alternatywnie możesz również użyć tego
sed
polecenia:źródło
Perl, „szwajcarska piła łańcuchowa armii” przetwarzania tekstu wiersza poleceń, może to również zrobić. Składnia jest (nieprzypadkowo) dość podobna do przykładów
tr
ised
:lub:
Ale szczerze mówiąc, jeśli nie chcesz poświęcić czasu na naukę nowego języka programowania (tak naprawdę jest to awk, Perl i sed i inne podobne narzędzia) tylko do tego podstawowego zadania, równie dobrze możesz to zrobić w dowolny edytor tekstu, który obsługuje wyszukiwanie i zamianę:
Otwórz plik CSV w swoim ulubionym edytorze tekstu (takim jak gedit, kate, podkładka pod mysz itp.; Nawet zwykły stary Notatnik lub Wordpad w systemie Windows może to zrobić).
Wybierz „Wyszukaj i zamień” z menu (zwykle znajduje się w „Edytuj”, jeśli nie ma osobnego menu „Wyszukaj”).
Wejdź
_
w pole wyszukiwania i,
pole zastępcze.Kliknij „Zamień wszystko”.
Powtórz za pomocą
"
w polu wyszukiwania i nic w polu zamiennym.Zapisz plik.
Teraz, jeśli musisz to zrobić dla 100 lub 1000 plików zamiast tylko jednego, wówczas nauka nowego narzędzia wiersza poleceń zaczyna mieć sens. I oczywiście, gdy już będziesz wiedział, jak używać Perla, seda itp., Zaoszczędzisz dużo czasu i wysiłku dzięki podobnym zadaniom później. Ale w przypadku jednorazowej pracy, której nie spodziewasz się wykonywać ponownie, czasem podstawowe interaktywne narzędzie, takie jak edytor tekstu, jest najprostszym rozwiązaniem.
źródło
Możesz to również zrobić
vim
.Otwórz plik:,
vim input.csv
a następnie użyjvim
zaawansowanego narzędzia wyszukiwanias
. Wpisz colon (:
), aby przejść do trybu poleceń, i uruchom następujące polecenia:Prawie takie same polecenia jak w odpowiedzi IanC, ale wewnątrz
vim
zamiast używaćsed
.źródło
Dlaczego nie zmienić domyślnych wartości wejściowych i wyjściowych wartości separatora
źródło