Alterar dicionário de finlandês-tcheco para tcheco finlandês

1

Eu tenho este arquivo link e eu gostaria de trocar primeiro collumn com o segundo. Eu usei o sed comenda

sed -ne 's/\([^a-z A-Z].*\) \(.*\)$/ / p' finnish-czech.txt

Segunda backreference funciona, mas a primeira não funciona. Eu usei como o fim da referência o 'espaço'. Mas então percebi que não funcionaria assim, porque algumas palavras contêm duas palavras.

    
por Mafi 06.04.2016 / 13:05

4 respostas

1

As palavras em diferentes languges são separadas por tabulações, não por espaços. Sed não lida com abas, mas você pode usar $'\t' no bash:

sed -e 's/\(.*\)'$'\t''\(.*\)/'$'\t''/' finnish-czech.txt

Antes de fazer isso, remova os finais de linha do Windows do arquivo executando dos2unix ou fromdos .

    
por 06.04.2016 / 13:15
2

Posso sugerir awk ?

awk 'BEGIN {OFS=FS="\t"} {sub(/\r/, ""); print $2,$1}' finnish-czech.txt

E isso também eliminará os retornos de carro do Windows no seu arquivo.

    
por 06.04.2016 / 13:23
1

Observe que o seu arquivo possui finais de linha no estilo do Windows. Isso pode confundir as coisas. Além disso, tem alguns caracteres extras no começo:

$ wget -O - http://sinivalkoiset.wz.cz/ostatni/finnish-czech.txt 2>/dev/null | head -n1 | od -c
0000000 357 273 277   A   f   r   i   k   k   a  \t   A   f   r   i   k
0000020   a  \r  \n
0000023

De qualquer forma, se você não estiver muito ligado a sed , esse tipo de coisa é muito fácil com awk :

tr -d $'\r'  < finnish-czech.txt | awk -F"\t" -vOFS="\t" '{print $2,$1}' 

O tr remove \r e, em seguida, o awk imprime o segundo campo seguido do primeiro. O -F"\t" define o separador do campo de entrada como guia (isso não é necessário, a menos que você possa ter mais de duas palavras por linha) e o -vOFS=:\t" define o separador de saída como guia.

    
por 06.04.2016 / 13:30
0

Você pode usar o agrupamento de padrões para capturar as colunas e trocá-las em substituição:

sed 's/^\([^[:blank:]]\+\)\([[:blank:]]\+\)\([^[:blank:]]\+\).*//' file.txt
    
por 06.04.2016 / 13:13