Создать PHP массив из букв

Я хотел бы создать массив PHP из сербского алфавита.

Снаружи

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш abc č ć d dž đ efghijkl lj mn nj oprs š tuvz ž 

должно стать этим (пользовательский массив):

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

Как я могу сделать это с помощью awk или sed?

7 Solutions collect form web for “Создать PHP массив из букв”

Это становится довольно близко:

 $ 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", "ш":"ž", - $ 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", "ш":"ž", 

Для zsh используется оператор ${a:^b} массива :

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

В bash, с параллельными массивами:

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

Использование 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 

Выход

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

вход

 а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш abc č ć d dž đ efghijkl lj mn nj oprs š tuvz ž 

Выход

 'а' : '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', 'ш' : 'ž', 

Вы просите awk но хотите создать массив PHP, поэтому я решил дать вам способ сделать это на PHP – и да, вы можете запустить PHP из командной строки …

Вставьте свои 2 строки в файл

 а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш abc č ć d dž đ efghijkl lj mn nj oprs š tuvz ž 

А затем прочитайте этот файл с помощью file() который переводит каждую строку в элемент массива.

Затем переберите этот массив, разбив каждую строку на собственный массив, основанный на разделении пробелов, используя explode()

Затем переберите 2 строки и перестройте ассоциативный массив.

Я заметил, что последний символ в первой строке, кажется, несет символ новой строки, но это может быть проблемой кодирования … недостаточно знакомой с работой с иностранными наборами символов.

 < ?php $letters=file("letters"); for($i=0;$i 
 awk 'NR==1 { printf "%s\n",'$0' }' input.txt | tr ' ' '\n' &gt; a.txt awk 'NR== 2{ printf "%s\n",'$0' }' input.txt | tr ' ' '\n' &gt;. b.txt paste -d : ab 
Linux и Unix - лучшая ОС в мире.