Назначить столбцы переменным в оболочке - PullRequest
0 голосов
/ 17 октября 2018

У меня есть этот файл:

NC_003037.1     453555  454448
NC_007493.2     2279220 2278345
NC_007952.1     1763831 1762950
NC_005791.1     844089  844916

Я хочу перебрать каждую строку, чтобы получить переменные "id" "column1" "column2", которые я буду использовать в этой команде:

efetch -db nuccore -id $id -chr_start $column1 -chr_stop $column2 -format fasta > file.txt

Не могли бы вы рассказать мне, как это сделать в сценарии оболочки?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Используйте цикл read :

while read -r id column1 column2; do
  efetch -db nuccore -id "$id" -chr_start "$column1" -chr_stop "$column2" -format fasta
done < file.input > file.txt
  • . Важно использовать двойные кавычки вокруг раскрывающихся переменных, чтобы предотвратить разбиение и сглаживание слов
  • put > file.txt в конце цикла для повышения эффективности ввода / вывода

Связано:

0 голосов
/ 17 октября 2018

Когда вы видите несколько столбцов, подумайте: awk.

rm -f file.txt ; cat inputfile.txt | \
awk '{ print "efetch -db nuccore -id "$1" -chr_start "$2" -chr_stop "$3" -format fasta" }' | \
while read cmd; do $cmd >> file.txt; done

(РЕДАКТИРОВАТЬ: перенес перенаправление в выполнение)

awk формирует команду,а затем while read cmd ...; done выполняет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...