используйте команду «читать» для передачи строк в качестве позиционных параметров в сценарий оболочки

Следующий файл работает, но ничего не делает, но это не ошибка ….

while read dates; do ./avg_hrly_all_final.sh ${dates}; done < ./dates_all.csv 

У меня есть список дат в «date_all.csv», которые имеют следующий вид:

 2005 01 2005 02 2005 03 

И сценарий, который я называю «avg_hrly_all_final.sh», работает, передавая ему 2 позиционных параметра, например:

 ./avg_hrly_all_final.sh 2005 01 

СЛЕДОВАТЬ ЗА

 xargs -n2 ./the_script.sh <./dates_to_pass.csv OR while read dates; do ./the_script.sh ${dates}; done <./dates_to_pass.csv 

работайте, просто убедитесь, что даты передаваемого файла имеют одинаковую разновидность «Конец строки», поскольку машина, на которой выполняется команда, ожидает;)

2 Solutions collect form web for “используйте команду «читать» для передачи строк в качестве позиционных параметров в сценарий оболочки”

Это вероятная работа для xargs :

 printf %s\\n '#!/bin/sh' 'printf "<%s>\n" "$$" "$@"' >avg_hourly.sh chmod +x ./avg_hourly.sh xargs -n2 ./avg_hourly.sh <<\IN 2005 01 2005 02 2005 03 IN 

xargs будет разделяться по пробелам по умолчанию и вызывать указанную команду один раз на -n2 возникающие аргументы. Я просто написал небольшой скрипт avg_hourly.sh который печатает свои аргументы по одному в строке, как ограниченный с любого конца avg_hourly.sh < и > следуя его PID в том же формате. Вышеприведенные отпечатки:

 <1115> <2005> <01> <1116> <2005> <02> <1117> <2005> <03> 

… просто чтобы продемонстрировать. Однако вы должны использовать <./dates_all.csv а не мой <<\IN здесь <<\IN -документ в качестве входных данных.

Если у вас есть GNU Parallel, вы можете сделать это:

 parallel --colsep ' ' ./avg_hrly_all_final.sh {1} {2} :::: ./dates_all.csv 

Если первой строкой csv-файла является заголовок, вы можете сделать что-то вроде:

 parallel --header : --colsep ' ' ./avg_hrly_all_final.sh {Year} {Month} :::: ./dates_all.csv 

GNU Parallel – это общий параллелизатор, который позволяет легко запускать задания параллельно на одном компьютере или на нескольких компьютерах, к которым у вас есть доступ ssh.

Если у вас есть 32 разных задания, которые вы хотите запустить на 4-х процессорах, прямой способ распараллеливания – запустить 8 заданий для каждого процессора:

Простое планирование

GNU Parallel вместо этого запускает новый процесс, когда заканчивается – сохранение активных процессоров и, следовательно, экономия времени:

GNU Параллельное планирование

Монтаж

Если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить личную установку, которая не требует доступа root. Это можно сделать за 10 секунд, выполнив следующие действия:

 (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

Другие варианты установки см. На странице http://git.savannah.gnu.org/cgit/parallel.git/tree/README.

Выучить больше

Дополнительные примеры: http://www.gnu.org/software/parallel/man.html

Смотрите видеоролики intro: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдите через учебник: http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на список адресов электронной почты, чтобы получить поддержку: https://lists.gnu.org/mailman/listinfo/parallel

  • Запуск сценария Python из любого места
  • Напишите сценарий оболочки, который принимает переменную из терминала? (переменная ~ $ command)
  • Bash: собрать две серии файлов
  • Разделение текстового файла на новые файлы
  • .profile написан в сценарии оболочки - могу ли я вместо этого заставить мою систему понять, что я хочу, чтобы вместо этого выполнялся скрипт Python?
  • Цитирование файлов листинга в UNIX
  • Как я могу использовать регулярное выражение для извлечения текста, следующего за двумя условиями, в переменную?
  • Использование `kill -s 0 $ pid` vs` ] `, чтобы определить, работает ли PID
  • Как проверить, установлен ли vim?
  • BASH- Найти владельца файла
  • Bash: вычислить время, прошедшее между двумя временными метками
  • Linux и Unix - лучшая ОС в мире.