Snažím se převést textový soubor na tabulku oddělenou kartami. Můj textový soubor je něco takového:
Dog
Cat
Fish
Lizard
Wolf
Lion
Shark
Gecko
Coyote
Puma
Eel
Iguana
Díky standardním funkcím vyhledávání a nahrazování v Gedit nebo LibreOffice je snadné nahradit konec řádku tabulátorem. Ale když jen vyměním návraty vozíků za karty, dostanu toto:
Dog Cat Fish Lizard Wolf Lion Shark Gecko Coyote Puma Eel Iguana
Ale musím to udělat, aby to vypadalo takto:
Dog Cat Fish Lizard
Wolf Lion Shark Gecko
Coyote Puma Eel Iguana
Mohu tedy zaměnit každý znak konce řádku za tabulátor kromě za každý čtvrtý řádek?
Nevím, jestli lze tento druh podmíněné iterace provést s regulárními výrazy v programu, jako je Gedit nebo LibreOffice, takže to možná musí být nějaká funkce příkazového řádku? Není mi ani jasné, jaký je nejlepší nástroj pro začátek.
Aktualizace:
Zkoušel jsem následující příkazy:
sed 'N;N;N;s/\n/\t/g' file > file.tsv
paste - - - - < file > file.tsv
pr -aT -s$'\t' -4 file > file.tsv
xargs -d '\n' -n4 < inputfile.txt
Ale když se pokusím otevřít výsledný tsv
v LibreOffice, sloupce nejsou úplně v pořádku. Nejsem si jistý, jestli to znamená, že výše uvedené příkazy neprovádím správně, nebo jestli dělám něco špatně ve funkci importu LibreOffice:
Jen pro informaci, požadovaný výsledek by měl vypadat takto:
Přijatá odpověď:
Mohli byste použijte editor příkazového řádku, jako je sed
sed 'N;N;N;s/\n/\t/g' file > file.tsv
nebo programověji přidáním zpětného lomítka znaků pro pokračování řádku ke každému z řádků, ke kterým se chcete připojit, pomocí n skip m
GNU sed adresního operátora a následuje ho klasickou jednořádkovou linkou pro spojování pokračujících řádků:
sed '0~4! s/$/\t\\/' file | sed -e :a -e '/\\$/N; s/\\\n//; ta'
Viz například Sed One-Liners Explained :
Připojte řádek k dalšímu, pokud končí zpětným lomítkem „\“.
sed -e :a -e '/\\$/N; s/\\\n//; ta'
Nicméně IMHO by to bylo jednodušší s jedním z dalších standardních nástrojů pro zpracování textu, např.
paste - - - - < file > file.tsv
(číslo -
bude odpovídat počtu sloupců) nebo
pr -aT -s$'\t' -4 file > file.tsv
(můžete vynechat -s$'\t
pokud vám nevadí, že výstup bude oddělen více kartami).
Podivné chování při opětovném importu, které pozorujete, je téměř jistě způsobeno tím, že původní soubor má zakončení řádků CRLF ve stylu Windows. Pokud potřebujete pracovat se soubory z Windows, můžete převod převést do příkazu různými způsoby, např.
tr -d '\r' < file.csv | paste - - - -
nebo
sed 'N;N;N;s/\r\n/\t/g' file.csv
První z nich odstraní VŠECHNY návraty vozíku, zatímco druhý zachová CR na konci každého z nových řádků (což může být to, co chcete, pokud je zamýšlený koncový uživatel ve Windows).
Související:Grafický tablet Wacom Cth-480 / Ctl-480 nebyl detekován v Ubuntu 13.10 v Ubuntu?