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

Вот однострочный способ сделать это:

ls --ignore = *. tsv | grep File1 | xargs -d "\ n" cat >> file.merged

или

find. -не -name "* .tsv" -name "File1 *" | xargs -d "\ n" cat >> file.merged

ls перечисляет все файлы, но игнорирует те, которые заканчиваются на .gff. grep сортирует все остальное, кроме File1. Затем имя файла вводится в команду cat, где >> добавляет их в file.merged

Единственное плохое в этом - то, что вам придется запускать его дважды, один раз для File1 и для File2.

1
31.07.2018, 22:22
7 ответов

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

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

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
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 ž

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

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

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

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

<?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);

?>
1
27.01.2020, 23:12

С помощью zshс использованием своего${a:^b}оператора сжатия массива :

{read -A a; read -A b} < your-file-with-those-2-lines.txt
printf "'%s': '%s',\n" ${a:^b}
2
27.01.2020, 23:12
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
0
27.01.2020, 23:12

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

Выход

'а': 'a',
'б': 'b',
'в': 'c',
'г': 'č',
'д': 'ć',
1
27.01.2020, 23:12

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

$ 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",
"ш":"ž",
2
27.01.2020, 23:12

В 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',
'ш': 'ž',
1
27.01.2020, 23:12
printf  "'%s' : '%s',\n" $(datamash -W transpose < input.txt)

Вход

а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
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 ž

Выход

'а' : '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',
'ш' : 'ž',
1
27.01.2020, 23:12

Теги

Похожие вопросы