Cria uma matriz PHP a partir de letras

1

Eu gostaria de criar uma matriz PHP a partir do alfabeto sérvio.

Fora de

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž

deve se tornar isso (uma matriz personalizada):

'а': 'a',
'б': 'b',
'в': 'c',
'г': 'č',
'д': 'ć',

Como posso fazer isso com o awk ou o sed?

    
por Luis Paganini 31.07.2018 / 20:47

7 respostas

2

Isso fica bem perto:

$ awk 'NR==1 { for( i=1; i<=NF; i++ ) {out[i][0]=$i } } NR==2 { for( i=1; i<=NF; i++) {out[i][1]=$i }  } END {for( i=1; i<=NF; i++ ) { print "\""out[i][0]"\":\""out[i][1]"\","}}' input
"а":"a",
"б":"b",
"в":"c",
"г":"č",
"д":"ć",
"ђ":"d",
"е":"dž",
"ж":"đ",
"з":"e",
"и":"f",
"ј":"g",
"к":"h",
"л":"i",
"љ":"j",
"м":"k",
"н":"l",
"њ":"lj",
"о":"m",
"п":"n",
"р":"nj",
"с":"o",
"т":"p",
"ћ":"r",
"у":"s",
"ф":"š",
"х":"t",
"ц":"u",
"ч":"v",
"џ":"z",
"ш":"ž",
    
por 31.07.2018 / 21:10
2

Com zsh usando seu operador% de ${a:^b} zipping :

{read -A a; read -A b} < your-file-with-those-2-lines.txt
printf "'%s': '%s',\n" ${a:^b}
    
por 01.08.2018 / 15:13
1

No bash, com matrizes paralelas:

$ read -a src < <(sed -n 1p input)
$ read -a dest < <(sed -n 2p input)
$ for((i=0; i < "${#src[@]}"; i++))
do
  printf "'%s': '%s',\n" "${src[i]}" "${dest[i]}"
done

A saída é:

'а': 'a',
'б': 'b',
'в': 'c',
'г': 'č',
'д': 'ć',
'ђ': 'd',
'е': 'dž',
'ж': 'đ',
'з': 'e',
'и': 'f',
'ј': 'g',
'к': 'h',
'л': 'i',
'љ': 'j',
'м': 'k',
'н': 'l',
'њ': 'lj',
'о': 'm',
'п': 'n',
'р': 'nj',
'с': 'o',
'т': 'p',
'ћ': 'r',
'у': 's',
'ф': 'š',
'х': 't',
'ц': 'u',
'ч': 'v',
'џ': 'z',
'ш': 'ž',
    
por 31.07.2018 / 21:20
1

Usando o AWK:

awk '                                  
BEGIN { OFS="'"': '"'";start=1 }       
NR>=start && $0!="" {                  
    for(i=1;i<=NF;i++)                 
        a[i]=a[i] (NR==start?"":OFS) $i
    }
END {                                  
    for(j=1;j<i;j++)                   
        print "'"'"'"a[j]"'"',"'"                     
}' file.txt

Resultado

'а': 'a',
'б': 'b',
'в': 'c',
'г': 'č',
'д': 'ć',
    
por 31.07.2018 / 21:02
1
printf  "'%s' : '%s',\n" $(datamash -W transpose < input.txt)

Entrada

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž

Resultado

'а' : 'a',
'б' : 'b',
'в' : 'c',
'г' : 'č',
'д' : 'ć',
'ђ' : 'd',
'е' : 'dž',
'ж' : 'đ',
'з' : 'e',
'и' : 'f',
'ј' : 'g',
'к' : 'h',
'л' : 'i',
'љ' : 'j',
'м' : 'k',
'н' : 'l',
'њ' : 'lj',
'о' : 'm',
'п' : 'n',
'р' : 'nj',
'с' : 'o',
'т' : 'p',
'ћ' : 'r',
'у' : 's',
'ф' : 'š',
'х' : 't',
'ц' : 'u',
'ч' : 'v',
'џ' : 'z',
'ш' : 'ž',
    
por 01.08.2018 / 14:10
1

Você pergunta por awk , mas quer criar uma matriz PHP, então imaginei que daria a você uma maneira PHP de fazer isso - e sim, você pode executar o PHP a partir da linha de comando ...

Cole suas duas linhas em um arquivo

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
a b c č ć d dž đ e f g h i j k l lj m n nj o p r s š t u v z ž

Em seguida, leia esse arquivo com file() , que adiciona cada linha a um elemento em uma matriz.

Em seguida, percorra essa matriz, dividindo cada linha em sua própria matriz com base na separação de espaço usando explode()

Em seguida, percorra suas duas linhas e reconstrua uma matriz associativa.

Eu noto que o último caractere na primeira linha parece trazer um novo caractere de linha, mas isso pode ser um problema de codificação ... não é familiar o suficiente para trabalhar com conjuntos de caracteres estrangeiros.

<?php

$letters=file("letters");

for($i=0;$i<count($letters);$i++){
    $line[$i]=explode(" ",$letters[$i]);
}

for($i=0;$i<count($line[1]);$i++){
        $newArray[$line[0][$i]]=$line[1][$i];
}

print_r($newArray);

?>
    
por 01.08.2018 / 15:02
0
awk 'NR==1 { printf "%s\n",'$0' }' input.txt | tr ' ' '\n' &amp;gt; a.txt
awk 'NR== 2{ printf "%s\n",'$0' }' input.txt | tr ' ' '\n' &amp;gt;. b.txt
paste -d : a b
    
por 08.08.2018 / 20:02