Это пошаговое руководство по
Как скомпилировать и установить Pidgin и заставить его работать с Google Talk (~ Hangouts) на Linux:
Различия между Hangouts и Google Talk вы найдете на этой странице:
https://support.google.com/a/answer/4564211
1. Включите 2-Step Verification на этой странице:
https://accounts.google.com/SmsAuthConfig
2. Сгенерируйте новый пароль приложения для Pidgin на этой странице, выберите Другое и назовите его как угодно:
https://security.google.com/settings/security/apppasswords
3. Установите последнюю версию Pidgin для вашей системы с этой страницы:
https://pidgin.im/download/ или из репозитория вашего дистрибутива Linux или скомпилируйте его из исходников (или для Max OS X рекомендуют использовать http://adium.im/)
4. Чтобы избежать ошибок безопасности, следует часто проверять, содержит ли репозиторий вашего дистрибутива Linux последнюю доступную версию, что можно проверить на этой странице https://pidgin.im/news/security/
5. Если вы выбрали компиляцию, вы просто устанавливаете зависимости, скачиваете и компилируете код, и устанавливаете Pidgin следующим образом:
$ sudo apt-get build-dep pidgin
$ sudo apt-get source pidgin
$ tar xjvf pidgin-2.x.y.tar.bz2
$ cd pidgin-2.x.y
$ ./configure && make && sudo make install
Альтернативный вариант, например, на Debian, где (по умолчанию) нужно su вместо sudo (сам не проверял, поправьте меня, если я ошибаюсь):
$ su -
# apt-get build-dep pidgin
# apt-get source pidgin
# exit
$ tar xjvf pidgin-2.x.y.tar.bz2
$ cd pidgin-2.x.y
$ ./configure && make
$ su -
# make install
Если по какой-то причине не получается, обратитесь к этой странице:
https://developer.pidgin.im/wiki/Installing%20Pidgin#WhycantIcompilePidgin
6. Щелкните правой кнопкой мыши значок Pidgin в системном трее и выберите Учетные записи.
7. Добавьте или измените свой аккаунт Google Talk, чтобы Имя пользователя было без @gmail.com или собственного домена.
8. Если у вас есть собственный домен для аккаунта Google, заполните поле Домен, в противном случае по умолчанию должно присутствовать gmail.com (без @).
9. Ресурс - это специфическая вещь XMPP, которая позволяет использовать несколько клиентов для одной учетной записи. При обычных обстоятельствах оставьте пустым.
10. Заполните Пароль, созданный на втором шаге.
11. Необязательно, но удобно, если вы находитесь на защищенном компьютере, поставить галочку Запомнить пароль.
12. Локальный псевдоним оставьте пустым.
13. Это должно выглядеть следующим образом:
14. На вкладке Advanced убедитесь, что у вас выбрано Require encryption и отключено plaintext.
15. Обратите внимание, что после сохранения этих настроек протокол автоматически изменится на XMPP, который в настоящее время доступен для сторонних приложений, таких как Pidgin.
$ awk 'NR > 1 { print $0 - prev } { prev = $0 }' <file.dat
-0.043962
-0.020674
0.002742
-0.004449
0.011906
-0.026333
0.001461
0.011245
-0.002031
-0.009281
-0.006112
0.011811
-0.004837
Делать это в цикле оболочки с вызовом bc
неудобно. В приведенном выше примере используется простой скрипт awk
, который считывает значения из файла одно за другим и для любой строки после первой печатает разницу, как вы описываете.
Первый блок, NR > 1 { print $0 - prev }
, условно печатает разницу между этой и предыдущей строкой, если мы достигли второй строки или дальше(NR
— это количество прочитанных записей, а «запись» по умолчанию строка ).
Второй блок, { prev = $0 }
, безоговорочно устанавливает prev
на значение в текущей строке.
Перенаправить вывод на newfile.dat
, чтобы сохранить там результат:
$ awk 'NR > 1 { print $0 - prev } { prev = $0 }' <file.dat >newfile.dat
Связанные:
Было некоторое упоминание о медленности вызова bc
в цикле. Ниже приведен способ использования одного вызова bc
для выполнения арифметических операций при чтении данных в цикле оболочки. (На самом деле я бы не рекомендовал решать эту проблему таким образом, и я только показываю это здесь. для интересующихся со -процессами вbash
):
#!/bin/bash
coproc bc
{
read prev
while read number; do
printf '%f - %f\n' "$number" "$prev" >&"${COPROC[1]}"
prev=$number
read -u "${COPROC[0]}" result
printf '%f\n' "$result"
done
} <file.dat >newfile.dat
kill "$COPROC_PID"
Значение в ${COPROC[1]}
является стандартным дескриптором входного файла bc
, а ${COPROC[0]}
— стандартным дескриптором выходного файла bc
.
Если вы хотели попытаться заставить скрипт оболочки работать, вам просто не хватило инициализации:
f=myfile.dat
prev=0
while read line; do
bc <<< "$line - $prev"
prev=$line
done < $f > newfile.dat
... где я также переместил перенаправление за пределы цикла, просто чтобы сэкономить часть операций ввода-вывода.
Решение bc
не печатает ведущие нули, в то время как решение awk печатает.
Вы можете использовать перенаправление exec
для чтения последовательных строк входного файла из нескольких точек в сценарии -один раз перед циклом (для установки начального значения ),затем многократно в течение этого (для каждого нового значения вычитать):
exec 3<file.dat
read prev<&3
while read curr ; do
bc <<< "$curr - $prev" >> newfile.dat
prev=$curr
done <&3
Использование некоторых простых утилит GNU и отсутствие циклов оболочки:
paste -d- <(head -n-1 file.dat) <(tail -n+2 file.dat) | bc
Идея состоит в том, чтобы разбить входной файл на два столбца; сместите второй столбец на 1 строку и вставьте столбцы вместе с -
в качестве разделителя. head
и tail
используются для обрезки последней строки 1-го столбца и первой строки 2-го столбца соответственно для достижения необходимого смещения. Результирующий список является обязательным списком арифметических разностей, который передается в bc
для оценки.
В качестве альтернативы, если вам нравится sed
, вы можете сделать это:
sed '1{s/$/-\\/;p;d};${p;d};s/.*/&\n&-\\/' file.dat | bc
Это дублирует каждую строку и вставляет -\
в конце второй версии каждой строки. Первая и последняя строки обрабатываются по-разному для создания необходимых выражений. Вывод sed выглядит примерно так:
a-\
b
b-\
c
c-\
d
Это снова действительные арифметические разности, которые bc
можно вычислить. Не то, чтобы bc
понимал обратную косую черту продолжения строки -на концах каждой второй строки.
Я использую массивы. Я использую их для всего. Я не могу вспомнить, как работают awk и sed, без тщательного изучения справочных страниц. Вот как бы я это сделал.
f=( $(< file.dat) )
for ((num=1;num<=${#f[@]};num++))
do
echo $(bc <<< ${f[$num]}-${f[(($num-1))]})>>differences.dat
done
Я так понимаю. Он имеет неприятные особенности некоторых других ответов :зацикливание и вызов bc снова и снова. Однако он читает файл только один раз, как и ответы с использованием sed и awk.
Вы можете попробовать это
num <- as.data.frame(num)
num$sub_num <- num[c(2:14, c("0")), ]
num$diff <- num$num - num$sub_num