Как эхо в серию нового файла, сгенерированного CAT

Используйте sshpass

$ sudo apt-get install sshpass

Создайте свой сценарий

#!/bin/bash

user="user"
psswd="password"
port="22"
host="domain.com"

sshpass -p $psswd ssh $user@$host -p $port

Выполните

$ bash connect_script.bash
Welcome to Ubuntu ..... LTS (.......)

* Documentation:  https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

You have new mail.
Last login: Thu Jan 21 11:39:35 2016 from x.x.x.x
user@host:~$ 
1
04.12.2018, 17:48
2 ответа

Не уверен, что полностью следую кавычкам в вашем скрипте и тому, что вы хотите, чтобы команда catделала, поскольку она читается с не перенаправленного -стандартного ввода, т. е. предположительно с вашей клавиатуры. Как насчет чего-то вроде

for i in `seq 1 22`
  do cat <<- EOF > loc_chr${i}.r
"a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
    library("splitstackshape");
    loc1 <- cSplit(a, "V1", ":");
    rm(a);
    out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
    write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)"
EOF
   done
1
27.01.2020, 23:42

Ваш первый пример кода не работает, потому что он имеет > build_file${i}.rв своей собственной строке, которая ничего не перенаправляет в 20 файлов. Добавьте > build_file${i}.rв конец вашего echo.

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

Вы должны удалить строку catи добавить > loc_chr${i}.rв конец вашего echo.

for i in `seq 1 22`; do
echo "a <- read.delim("file${i}.txt", header=T, check.names=FALSE);
library("splitstackshape");
loc1 <- cSplit(a, "V1", ":");
rm(a);
out <- cbind.data.frame(loc1$V1_1, loc1$V1_2);
write.table(out, "out_file${i}.txt", sep="\t", row.names=F, quote=F)" > loc_chr${i}.r
done
0
27.01.2020, 23:42

Теги

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