Вот однострочный способ сделать это:
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.
Вы запрашиваете 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);
?>
С помощью zsh
с использованием своего${a:^b}
оператора сжатия массива :
{read -A a; read -A b} < your-file-with-those-2-lines.txt
printf "'%s': '%s',\n" ${a:^b}
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 : a b
Использование 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',
'г': 'č',
'д': 'ć',
Это довольно близко:
$ 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",
"ш":"ž",
В 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',
'ш': 'ž',
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',
'ш' : 'ž',